• 二叉树的下一个节点


    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。

    注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

    1.分两种情况考虑

    (1) 有右子树的情况: 那么它下一个节点就是它的右子树的最左子树   先右转 然后左转一直走!!

    (2) 无右子树的情况: (1)如果节点是其父亲节点的左子节点,那么其实我们所要搜寻的下一个节点就是这个父亲节点!!!

                                      (2)如果节点是其父亲节点的右子节点,那么就应该沿着该父亲节点的指针 next 一直向上遍历 ;

                                               直到找到一个节点是其父亲节点的左节点;

    /*
    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 * parents;
            
            if(pNode==nullptr)//检查
            return NULL;
            //第一种情况 存在右子树
            if(pNode->right!=NULL)
             {
                pNode=pNode->right;//先指向右边
                while(pNode->left!=NULL)
                {
                   pNode=pNode->left;
                }
                return pNode;    
             }
           //第二种情况
            while(pNode->next!=NULL)//向上遍历  父亲节点
            {
                parents=pNode->next; //父亲 
             
               if(parents->left== pNode){  //其父亲节点的左边节点是当前这个节点
                    
                  return parents ; //返回父亲节点
                }
              pNode=pNode->next;//一直向后移动
                
            }
            return NULL;//都不是 就是没找到
            
            
          
        }
    };
  • 相关阅读:
    BigPipe
    HDFS Scribe Integration 【转】
    C++ | class size
    Leetcode | Container With Most Water
    Leetcode | Sqrt(x)
    Network | sk_buff
    JVM, JRE 和JDK
    facebook面试题【转】
    ML | SVM
    ML| EM
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11369670.html
Copyright © 2020-2023  润新知