填充每個節點的下一個右側節點指標-116
阿新 • • 發佈:2021-12-15
填充每個節點的下一個右側節點指標
題目:填充每個節點的下一個右側節點指標
給定一個 完全二叉樹,二叉樹定義如下:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每個 next 指標,讓這個指標指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指標設定為 NULL。
初始狀態下,所有 next 指標都被設定為 NULL。
例項:
輸入:root = [1,2,3,4,5,6,7]
輸出:[1,#,2,3,#,4,5,6,7,#]
題解:
1. BFS
利用BFS,層次遍歷每一層,當前節點的next等於佇列中的下一個節點
時間複雜度:10%, 空間複雜度:10%
class Solution { public Node connect(Node root) { Queue<Node> queue=new LinkedList<>(); if(root == null) return root; queue.add(root); while (!queue.isEmpty()) { int l=queue.size(); for(int i=0;i<l;i++) { Node temp=queue.poll(); if(i!=l-1) { temp.next=new Node(); temp.next=queue.peek(); } else temp.next=null; if(temp.left!=null) queue.add(temp.left); if(temp.right!=null) queue.add(temp.right); } } return root; } }
2. 遞迴
左節點.next=父節點.right
右節點.next=父節點.next.left
class Solution { public void dfs(Node root) { if(root==null || root.left==null) return; root.left.next=root.right; if(root.next!=null) root.right.next=root.next.left; dfs(root.left); dfs(root.right); } public Node connect(Node root) { if(root==null) return root; root.next=null; dfs(root); return root; } }