zoukankan      html  css  js  c++  java
  • 剑指offer 二叉树的下一个结点

    题目描述

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

    1)如果一个节点有右子树,那么它的下一个结点就是它的右子树中的最左子节点;

    2)如果一个节点没有右子树,并且它还是它父节点的右子节点,我们可以沿着指向父节点的指针一直向上遍历,知道找到一个是它父节点的右子节点的左子节点的节点,就是第一个向右转的子部分根节点。

    /*
    struct TreeLinkNode {
        int val;
        struct TreeLinkNode *left;
        struct TreeLinkNode *right;
        struct TreeLinkNode *next;
        TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
            
        }
    };
    */
    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){//第一个转向右边的结点就是小范围根节点
                if(pNode -> next -> left == pNode){
                    return pNode -> next;
                }
                pNode = pNode -> next;
            }
            return nullptr;
        }
    };

    思路2:首先全部中序遍历,将结果保存在一个数组里面,然后直接找到当前节点的下一个结点就可以了。

  • 相关阅读:
    docker安装和hub
    sql获取时间、年龄
    在eclipse中配置Tomcat时,出现“Cannot create a server using the selected type”的错误。
    ajax简单做html查询删除(鲜花)
    java使用jsp建立项目+视频
    java根据数据库自动生成代码
    java连接数据库增删改查公共方法
    制作二维码java
    富文本编译器
    java字符串类型和时间类型的转换
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7512207.html
Copyright © 2011-2022 走看看