剑指Offer-二叉树的下一节点
2019-07-13 17:27
996 查看
题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
中序遍历为LVR。我们进行分析,
若当前节点有右子树,那么下一节点肯定在其右子树,对右子树一直进行向左遍历。
若当前节点为父节点的左子树,直接返回父节点,若不是,则一直向上遍历满足条件的父节点。
代码实现:
/* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } } */ public class Solution { //LVR public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode==null) return null; //当前节点右子树不为空,肯定在右边 if(pNode.right!=null){ //一直找到右子树最左端 TreeLinkNode left=pNode.right; while(left.left!=null){ left=left.left; } return left; } while(pNode.next!=null){ TreeLinkNode par=pNode.next; //当前节点为父节点的左子树,直接返回父节点。 //若为右子树,则需要持续向上遍历。 if(par.left==pNode) return par; pNode=par; } return null; } }
相关文章推荐
- 剑指offer(60):二叉树的下一个节点
- 剑指offer-从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 二叉树系列 - 求两节点的最低公共祖先,例 剑指Offer 50
- 剑指offer之二叉树的下一个节点
- (C++)剑指offer-57:二叉树的下一个节点(树)
- 剑指offer_二叉树---二叉树的下一节点
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印(剑指offer,面试题32)
- 【剑指offer-8】二叉树的下一个节点
- 剑指offer_二叉树的下一个节点
- 剑指offer-由上而下由左到右输出二叉树节点值
- 剑指offer-二叉树的下一个节点
- [剑指Offer] 08_二叉树中的下一个节点
- 剑指offer --- 二叉树的下一个节点
- 【剑指offer】面试题8:二叉树的下一个节点
- 剑指offer——二叉树的下一个节点___
- 剑指offer——二叉树的下一个节点
- 剑指offer 58 - 二叉树的下一个节点
- 剑指offer--面试题8:二叉树的下一个节点
- 剑指Offer--二叉树的下一个节点
- <剑指offer 面试题8>二叉树的下一个节点(Java)