LeetCode 樹 116. 填充每個節點的下一個右側節點指標(層序遍歷 分層)
阿新 • • 發佈:2020-07-13
題目的要求,大白話說就是:把指標指向同層的右側節點
提到同層,自然就要想到層序遍歷,自然是佇列實現
問題是需要分層
所以採用之前題目用的那種計數的方式
class Solution { public Node connect(Node root) { if(root==null) {return root;} Queue<Node> queue=new ArrayDeque<>(); Node fake=root; queue.add(root);while(queue.size()!=0) { int count=queue.size(); for(int n=0;n<count;n++) { fake=queue.poll(); if(n<count-1) { fake.next=queue.peek(); } if(fake.left!=null) { queue.add(fake.left); } if(fake.right!=null) { queue.add(fake.right); } } } return root; } }
幾個碰到的問題:
1.前面要加對於空樹的判斷,要不會搞出null.next這種錯誤
2.迴圈跳出的條件
3.這個地方
if(n<count-1) { fake.next=queue.peek(); }
首先是,好在有一個peek的方法,使我們不用搞front Node和back Node來把先後排出佇列的節點連起來。
其次是為什麼要加if(n<count-1)這個計數的條件。因為最後一個元素的peek會peek到下一層去。。。
由此發現,這種迴圈中,判斷迴圈條件是什麼任然是一個很棘手的問題。