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

醃製99%的鹹魚發表於2020-10-15

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

題目

給定一個二叉樹

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每個 next 指標,讓這個指標指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指標設定為 NULL。

初始狀態下,所有 next 指標都被設定為 NULL。
在這裡插入圖片描述

解法

class Solution {
    public Node connect(Node root) {
        if(root==null) return null;
        //如果左右子節點不是空的,右側子節點的next交給下面的判斷語句
        if(root.left != null && root.right != null){
            root.left.next = root.right;
        }
        //如果左側子節點不是空的,右側子節點是空的
        if(root.left != null && root.right == null){
            root.left.next = getNext(root.next);
        }
        //如果右側節點不是空的(這個包括了兩個情況,一個情況是左右子節點都不是空的,另一個情況是左子節點是空的,右側子節點不是空的)
        if(root.right != null){
            root.right.next = getNext(root.next);
        }

        connect(root.right);
        connect(root.left);
        
        return root;
    }
	
	//獲取下一個右側節點
    private Node getNext(Node root){
        if(root == null) return null;
        if(root.left != null) return root.left;
        if(root.right != null) return root.right;
        if(root.next != null) return getNext(root.next);
        return null;
    }
}

相關文章