給定一個二叉樹node
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每一個 next 指針,讓這個指針指向其下一個右側節點。若是找不到下一個右側節點,則將 next 指針設置爲 NULL。
網絡
初始狀態下,全部 next 指針都被設置爲 NULL。函數
進階:指針
你只能使用常量級額外空間。
使用遞歸解題也符合要求,本題中遞歸程序佔用的棧空間不算作額外的空間複雜度。
code
示例:blog
輸入:root = [1,2,3,4,5,null,7]
輸出:[1,#,2,3,#,4,5,7,#]
解釋:給定二叉樹如圖 A 所示,你的函數應該填充它的每一個 next 指針,以指向其下一個右側節點,如圖 B 所示。
遞歸
提示:leetcode
樹中的節點數小於 6000
-100 <= node.val <= 100
it
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。
io
/* // 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<>(); q.offer(root); while(!q.isEmpty()){ int n = q.size(); Node last = null; for(int i=1; i<= n; i++){ Node f = q.poll(); if(f.left != null){ q.offer(f.left); } if(f.right != null){ q.offer(f.right); } if(i != 1){ last.next = f; } last = f; } } return root; } }