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;
            }
        }
    };
  • 相关阅读:
    注解-案例
    注解(Annotation)
    适合新手看的超详细CentOS Linux 7 安装Tomcat8过程
    CentOS Linux 7 提示 lsof: 未找到命令
    解决MySql报错:1130
    Spring Boot 创建自定义的properties文件
    spring boot 使用Schedule创建轻量级定时任务
    4.Java数组模块
    3.IDEA开发工具
    2.java基础语法
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/12177260.html
Copyright © 2011-2022 走看看