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;
        }
    }
  • 相关阅读:
    Third practice 3
    Third practice 2
    Third practice 1
    mock模拟get和post请求
    eslint语法检测报错解决办法
    python 入门到实践第四章案例
    python 入门到实践第三章课后练习
    python 入门到实践第三章
    axios拦截器的使用
    axios的实例和模块封装
  • 原文地址:https://www.cnblogs.com/silentteller/p/12114894.html
Copyright © 2011-2022 走看看