Leetcode---每個節點的右向指標--非遞迴解法
阿新 • • 發佈:2018-12-05
每個節點的右向指標
該題用遞迴解法相比較程式碼更簡潔
題目連結:每個節點的右向指標
思路:
這裡的思路和我前面寫的層次遍歷二叉樹的文章基本相同,可以參考之前的思路。
public void connect(TreeLinkNode root) {
if(root==null) {
return;
}
//對該二叉樹進行層次遍歷
//需要一個佇列
LinkedList<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
//當前層和下一層的節點數
int cur_node = 0,next_node = 0;
//根節點入佇列,遍歷
queue.offer(root);
++cur_node;
TreeLinkNode node_front = null;
TreeLinkNode node_rear = null;
while(!queue.isEmpty()) {
node_front = queue.poll();//先出來第一個節點
--cur_node;
node_front.next = null;
//遍歷左右子樹
if(node_front.left!=null) {
queue.offer(node_front. left);
++next_node;
}
if(node_front.right!=null) {
queue.offer(node_front.right);
++next_node;
}
while(cur_node!=0) {
//遍歷每一層
//出佇列
node_rear = queue.poll();
--cur_node;
if(node_rear.left!=null) {
queue.offer(node_rear.left);
++next_node;
}
if (node_rear.right!=null) {
queue.offer(node_rear.right);
++next_node;
}
node_front.next = node_rear;
node_front = node_rear;
}
if(node_rear!=null) {
node_rear.next = null;
}
cur_node = next_node;
next_node = 0;
}
}