剑指offer_二叉树---二叉树的下一节点

简介: 剑指offer_二叉树---二叉树的下一节点

##题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

##解题思路

1,因为是中序遍历,顺序为左—中----右

2,因为考虑下一个节点,所以考察范围可以缩小到中和右

3,如果当前节点有右子树,那么下一个节点就是右子树的最左节点

4,如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点

5,如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点

##代码

/**
 * 
 */
package offerTest;
/**
 * <p>
 * Title:Next
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月21日 上午10:34:53
 */
class TreeLinkNode {
  int val;
  TreeLinkNode left = null;
  TreeLinkNode right = null;
  TreeLinkNode next = null;
  TreeLinkNode(int val) {
    this.val = val;
  }
}
public class Next {
  public TreeLinkNode GetNext(TreeLinkNode pNode) {
    if (pNode == null) {
      return null;
    }
    // 如果当前节点有右子树
    if (pNode.right != null) {
      TreeLinkNode p = pNode.right;
      while (p.left != null) {
        p = p.left;
      }
      return p;
    } else { // 如果当前节点没有右子树,且是父节点的左子节点
      if (pNode.next != null) {
        TreeLinkNode pcur = pNode;
        TreeLinkNode parent = pcur.next;
        if (parent != null && pcur == parent.left) { 如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点
          return parent;
        }
        while (parent != null && pcur == parent.right) {如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点
          pcur = parent;
          parent = pcur.next;
        }
        return parent;
      }
    }
    return null;
  }
}


相关文章
【Leetcode -872.叶子相似的树 -993.二叉树的堂兄弟节点】
【Leetcode -872.叶子相似的树 -993.二叉树的堂兄弟节点】
44 0
代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数
代码随想录 Day13 二叉树 LeetCode T104 二叉树的最大深度 T111 二叉树的最小深度 T222完全二叉树的节点个数
62 0
|
7月前
|
Java BI 数据库管理
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
102 11
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ
这题算是简单题,我们依然从最简单的情况来考虑。
69 0
剑指offer-7.二叉树的下一个节点
剑指offer-7.二叉树的下一个节点
43 1
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
74 0
剑指offer_二叉树---二叉搜索树的第k个结点
剑指offer_二叉树---二叉搜索树的第k个结点
67 0
|
算法
剑指offer_二叉树---平衡二叉树
剑指offer_二叉树---平衡二叉树
75 0
剑指offer_二叉树---二叉搜索树的后序遍历
剑指offer_二叉树---二叉搜索树的后序遍历
71 0
剑指offer_二叉树---二叉树的深度
剑指offer_二叉树---二叉树的深度
74 0