剑指offer--二叉树的下一个结点
2017-08-07 19:43
531 查看
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。[java] view
plain copy
public static class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = nul
f673
l;
TreeLinkNode(int val) {
this.val = val;
}
}
TreeLinkNode GetNext(TreeLinkNode pNode){
if(pNode==null) return null;
if(pNode.next==null){//如果是根节点,查找右子树的最左节点(如果存在)
if(pNode.right==null) return null;
pNode = pNode.right;
while(pNode.left!=null) pNode=pNode.left;
return pNode;
}else if(pNode.next.left==pNode){//如果是父节点的左节点,当其右节点不存在时,返回父节点;否则返回右子树最左节点
if(pNode.right==null) return pNode.next;
pNode = pNode.right;
while(pNode.left!=null) pNode=pNode.left;
return pNode;
}else if(pNode.next.right==pNode){//如果是父节点的右节点,当其右节点存在,返回右节点;否则返回最非右父节点之父(如果过程循环到根节点,返回空)
if(pNode.right!=null) return pNode.right;
while(pNode.next!=null && pNode.next.right==pNode) pNode=pNode.next;
if(pNode.next==null) return null;
return pNode.next;
}
return null;
}
原文链接http://blog.csdn.net/crazy__chen/article/details/45101775
相关文章推荐
- 剑指offer:二叉树的下一个结点
- 剑指offer(五十七)之二叉树的下一个结点
- 剑指offer52--找到二叉树下一个结点
- 剑指offer-二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- 【剑指offer】第八题(二叉树的下一个结点) 和 第九题(用两个栈实现队列)
- 【剑指offer】二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 剑指offer(C++)——二叉树的下一个结点
- 剑指Offer——二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 剑指 offer 二叉树的下一个结点 @python
- 剑指offer--二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer—二叉树的下一个结点
- 剑指offer(54)-二叉树的下一个结点
- 剑指Offer_57_二叉树的下一个结点
- 剑指offer--(18)二叉树的下一个结点--Java描述