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

    题目描述

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
     
    思路:
    要分几种情况:
    (1)结点有右结点,则其下一个结点为其右结点的最左子节点。
    (2)结点无右结点,且是其父节点的左节点,则其下一个结点为其父节点。
    (3)结点无右结点,其是其父节点的右结点,则其有如下两种情况:

     

    第一种情况需要不断的向上回溯,第二种情况下一个结点就是其父节点。

    代码如下:

    /*
    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)
        {
            TreeLinkNode * rev;
            if(pNode==NULL)
                return NULL;
            if(pNode->right!=NULL)
            {
                rev=pNode->right;
                while(rev->left!=NULL)
                    rev=rev->left;
                return rev;
            }
            else
            {
                if(pNode->next==NULL)
                {
                    return NULL;
                }
                if(pNode->next->left==pNode)
                {
                    return pNode->next;
                }
                rev=pNode;
                while(rev->next!=NULL&&rev==rev->next->right)
                {
                    rev=rev->next;
                }
                return rev->next;
            }
        }
    };
  • 相关阅读:
    Sublime Text3 包管理器、插件安装
    Sublime text3 安装
    VS中的波浪线
    VS的启动方式
    VS常用快捷键
    C#基础性问题
    nginx前端项目发布
    vue父子组件实现数据双向绑定
    常用在线echarts图表
    使用echarts地图踩坑记
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/12177260.html
Copyright © 2011-2022 走看看