zoukankan      html  css  js  c++  java
  • 剑指Offer-57.二叉树的下一个结点(C++/Java)

    题目:

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

    分析:

    二叉树的中序遍历是左根右,所以如果一个结点的右子树不为空,那么这个节点的下一个节点一定是右子树的最左结点,如果右子树不存在左子树的话,就返回右子树的根结点。

    如果一个结点的右子树为空,且当前结点是其父结点的左子树的根结点,那么直接返回其父节点,否则就一直访问其父结点,直到找到一个结点是其父结点的左子结点,同样返回其父结点。

    程序:

    C++

    class Solution {
    public:
        TreeLinkNode* GetNext(TreeLinkNode* pNode)
        {
            if(pNode == nullptr)
                return pNode;
            if(pNode->right != nullptr){
                pNode = pNode->right;
                while(pNode->left != nullptr)
                    pNode = pNode->left;
                return pNode;
            }
            while(pNode->next != nullptr && pNode->next->left != pNode){
                pNode = pNode->next;
            }
            return pNode->next;
        }
    };

    Java

    public class Solution {
        public TreeLinkNode GetNext(TreeLinkNode pNode)
        {
            if(pNode == null)
                return pNode;
            if(pNode.right != null){
                TreeLinkNode p = pNode.right;
                while(p.left != null)
                    p = p.left;
                return p;
            }
            while(pNode.next != null && pNode.next.left != pNode){
                pNode = pNode.next;
            }
            return pNode.next;
        }
    }
  • 相关阅读:
    实验二 20159213
    读书笔记二 20159213
    读书随笔 20159213
    keycode对照表
    jquery ajax中各个事件执行顺序如下
    移动端web开发技巧
    zepto处理touch事件
    CSS控制文字只显示一行,超出部分显示省略号
    input按钮的事件处理大全
    jquery中ajax处理跨域的三大方式
  • 原文地址:https://www.cnblogs.com/silentteller/p/12114894.html
Copyright © 2011-2022 走看看