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

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

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

    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;//都不是 就是没找到
            
            
          
        }
    };
  • 相关阅读:
    adb logcat 基本用法
    系统广播 android.intent.action.KILL_BACKGROUND_SERVICE
    eclipse android 不会自动生成R.java文件和包的解决办法
    android sdk 镜像点
    android ant 自动编译打包
    java spring 框架学习
    android机型排行榜(201509)
    转: Jenkins+Gradle实现android开发持续集成、打包
    android app多渠道分发打包
    转: 从微信的故障谈谈服务可用性
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11369670.html
Copyright © 2011-2022 走看看