1. 程式人生 > 其它 >填充每個節點的下一個右側節點指標-116

填充每個節點的下一個右側節點指標-116

填充每個節點的下一個右側節點指標

題目:填充每個節點的下一個右側節點指標

給定一個 完全二叉樹,二叉樹定義如下:

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;
        }
    }