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

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


    思路:

    (1)  若该节点存在右子树:则下一个节点为右子树最左子节点(如图节点  B  )  

    (2)  若该节点不存在右子树:这时分两种情况

                2.1   该节点为父节点的左子节点,则下一个节点为其父节点(如图节点     D     
                2.2   该节点为父节点的右子节点,则沿着父节点向上遍历,知道找到一个节点的父节点的左子节点为该节点,则该节点的父节点下一个节点(如图节点 I,沿着父节点一直向上查找找到  B (B  为其父节点的左子节点),则 B 的父节点  A  为下一个节点)

    struct TreeLinkNode { 
        int val; 
        struct TreeLinkNode *left; 
        struct TreeLinkNode *right; 
        struct TreeLinkNode *next; 
        TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { 
             
        } 
    }; 
        TreeLinkNode* GetNext(TreeLinkNode* pNode)
        {
            if(pNode==NULL)  return NULL;
            if(pNode->right!=NULL)
            {
                pNode =pNode->right;
               while(pNode->left)
               {
                   pNode=pNode->left;
               }
                return pNode;
            }
            while(pNode->next)
            {
                if(pNode->next->left==pNode)  return pNode->next;
                
                pNode=pNode->next;
            }
            return NULL;
            
        }
  • 相关阅读:
    c#配置文件
    C#预处理指令
    C#面向对象详解
    231. Power of Two
    226. Invert Binary Tree
    C语言函数入参压栈顺序为什么是从右向左?
    对C++ 虚函数的理解
    悲观锁和乐观锁
    什么是索引
    CHAR 和VARCHAR的区别
  • 原文地址:https://www.cnblogs.com/wft1990/p/7453539.html
Copyright © 2011-2022 走看看