[leet code] Populating Next Right Pointers in Each Node
2014-01-03 09:17
363 查看
Given a binary tree
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
Initially, all next pointers are set to
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
After calling your function, the tree should look like:
思路总结:
看到树结构, 第一反应要用递归
然后开始罗列情况:
1. root node直接指向null
2. 其他情况在递归中实现
2.1 如果该节点有左子节点(根据题目定义同时也会有右子节点)
2.1.1 左子节点指向右子节点
2.1.2 右子节点指向节点.next的左直接点(题目example中的节点5->6); 如果右子节点已经是该层最右节点(通过节点.next == null判断), 则该右子节点指向null
2.2 如果该节点没有子节点则什么都不做, 返回上一层递归
remark: 写code的时候另外新建了helper function为了把第一种情况从递归中分离出来, 方便理解.
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
NULL.
Initially, all next pointers are set to
NULL.
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example,
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \ 4->5->6->7 -> NULL
思路总结:
看到树结构, 第一反应要用递归
然后开始罗列情况:
1. root node直接指向null
2. 其他情况在递归中实现
2.1 如果该节点有左子节点(根据题目定义同时也会有右子节点)
2.1.1 左子节点指向右子节点
2.1.2 右子节点指向节点.next的左直接点(题目example中的节点5->6); 如果右子节点已经是该层最右节点(通过节点.next == null判断), 则该右子节点指向null
2.2 如果该节点没有子节点则什么都不做, 返回上一层递归
remark: 写code的时候另外新建了helper function为了把第一种情况从递归中分离出来, 方便理解.
/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void connect(TreeLinkNode root) { if (root != null){ // root.next always -> null root.next = null; helper(root); } } public void helper(TreeLinkNode node){ if (node.left != null){ //left child -> right child node.left.next = node.right; //right child -> null if the right most if(node.next == null) node.right.next = null; //right child -> right node's left child else node.right.next = node.next.left; helper(node.left); helper(node.right); } } }
相关文章推荐
- [leet code] Populating Next Right Pointers in Each Node II
- LeeCode_Populating Next Right Pointers in Each Node II
- FTPrep, 116 Populating Next Right Pointers in Each Node, TODO,再多code几遍,虽然总结写得还比较ok,但是还是手感不熟
- CODE 16: Populating Next Right Pointers in Each Node II
- populating-next-right-pointers-in-each-node Java code
- leecode 解题总结:116. Populating Next Right Pointers in Each Node
- populating-next-right-pointers-in-each-node Java code
- leecode 解题总结:117. Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- [Leetcode]Populating Next Right Pointers in Each Node
- leetcode:Populating Next Right Pointers in Each Node
- [LeetCode]problem 116. Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node 更好的方法待补充
- Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node II
- LeetCode算法题目:Populating Next Right Pointers in Each Node II
- LeetCode(Oct28'12):Populating Next Right Pointers in Each Node II
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node II leetcode
- leetcode 116 —— Populating Next Right Pointers in Each Node