zoukankan      html  css  js  c++  java
  • 二叉树的下一个节点

    题目:给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左,右孩子节点的指针,还有一个指向父节点的指针

     如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。即从右子节点出发一直沿着指向左子节点的指针,我们就能找到它的下一个节点

    如果一个节点没有右子树,如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点。

    如果一个节点既没有右子树,并且它还是它父节点的右子节点。我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点。如果这样的节点存在,那么这个节点的父节点就是我们要找的下一个节点(以i为例,找到b,找到a)

    剑指offer代码:

    主要逻辑也同上,按照其是否有右子树,有右子树就一直往左找;如果没有右子树则不需要考虑其左子树,就开始看其是其父节点的左孩子还是右孩子,左孩子则其父节点就是其下一个节点,如果是右孩子则表示以其父节点为根的子树访问完了,继续往上,直到找到一个节点是其对应父节点的左孩子,表示这个左子树完了,所以其父节点就是下一个要访问的节点。

  • 相关阅读:
    Hibernate之HQL查询
    Java设计模式----状态模式(State)
    Java设计模式----备忘录模式(Memento)
    Java设计模式----命令模式(Command)
    Java设计模式----责任链模式(Chain of Responsibility)
    Java基础小知识
    Hibernate检索策略
    Java设计模式----观察者模式(Observer)
    Google代码实验室
    Codeforces Round #257 (Div. 2) 前四题
  • 原文地址:https://www.cnblogs.com/libin123/p/12770476.html
Copyright © 2011-2022 走看看