二叉树的下一个节点
2018-03-31 15:49
183 查看
二叉树的下一个节点
剑指offer给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
中序:{ d,b,h,e,i,a,f,c,g}
分析:
一:如果一个节点有右子树,那么下一个节点就是它的右子树中最左子节点。如节点b,下一个访问节点是h。
二:如果一个节点没有右子树,但是父节点的左子节点那么下一个节点将访问其父节点。如节点d,下一个访问节点是b。
三:如果一个节点没有右子树,它是父节点的右子节点,那么一直向上遍历,一直找到一个是它父节点的左子节点的节点。如节点i,其下一个访问节点是a。
`
class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; //next指向父亲节点 TreeLinkNode(int val) { this.val = val; } } public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { //为空 if(pNode==null) return null; TreeLinkNode nextNode=null; //含有右子树 if(pNode.right!=null){ TreeLinkNode rightNode=pNode.right; //一定是右子树最左边的节点 while(rightNode.left!=null){ rightNode=rightNode.left; } nextNode=rightNode; }else{ TreeLinkNode currentNode=pNode; TreeLinkNode parentNode=pNode.next; //没有右子树且其是父亲节点的右孩子 while(parentNode!=null&¤tNode==parentNode.right){ currentNode=parentNode; parentNode=parentNode.next; } nextNode=parentNode; } return nextNode; } }
`
相关文章推荐
- 找出二叉树中指定结点的下一个结点(中序后继)可以假定每个结点都有指向父节点的连接
- 《剑指offer》编程题java实现(二十八):二叉树的下一个节点
- 剑指Offer-8:二叉树的下一个节点
- 剑指offer-二叉树的下一个节点
- 【js版】 剑指offer【6】二叉树的下一个节点
- 找二叉树节点的下一个节点
- 【剑指offer】面试题 8:二叉树的下一个节点
- 剑指offer给定二叉树,求中序遍历的下一个 节点,前序遍历,后序遍历扩展
- 二叉树的下一个节点(中序)
- 二叉树的下一个节点
- 剑指offer --- 二叉树的下一个节点
- 面试题(八)二叉树的下一个节点
- Cracking coding interview (4.5)二叉树按中序遍历次序返回某节点下一个节点
- 二叉树的下一个节点
- 面试题58:二叉树的下一个节点
- 二叉树的下一个节点
- 剑指offer之二叉树的下一个节点
- 《剑指offer》二叉树的下一个节点
- 剑指Offer实现面试题8-二叉树的下一个节点
- 二叉树的下一个节点