給定一個二叉樹
struct Node {
? int val;
? Node *left;
? Node *right;
? Node *next;
}
填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL。
初始狀態下,所有?next 指針都被設置為 NULL。
?
進階:
你只能使用常量級額外空間。
使用遞歸解題也符合要求,本題中遞歸程序占用的棧空間不算做額外的空間復雜度。
?
示例:
輸入:root = [1,2,3,4,5,null,7]
輸出:[1,#,2,3,#,4,5,7,#]
解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每個 next 指針,以指向其下一個右側節點,如圖 B 所示。
?
提示:
樹中的節點數小于 6000
-100?<= node.val <= 100
思路:層序遍歷改一下,把同一層的連一下即可。
/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/
class Solution {public Node connect(Node root) {if (root == null) {return null;}Queue<Node> Q = new LinkedList<Node>(); Q.add(root);while (Q.size() > 0) {int size = Q.size();for(int i = 0; i < size; i++) {Node node = Q.poll();if (i < size - 1) {node.next = Q.peek();}if (node.left != null) {Q.add(node.left);}if (node.right != null) {Q.add(node.right);}}}return root;}
}
?