zoukankan      html  css  js  c++  java
  • 在二叉树中找到一个节点的后继节点

    /*
    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)
        {
            if(pNode == NULL)
    		{
    			return pNode;
    		}
    		
    		if(pNode->right != NULL)
    		{
    			//后继节点就是右子树上最左的节点
    			//找到后可提前返回
    			return GetLeftMost(pNode->right);
    		}
    		else
    		{
    			//通过x找到父节点p,若x是p的左子树,则x的后继节点为p,若x是p的右子树,则继续向上找
    			TreeLinkNode* parent = pNode->next;
    			while(pNode != parent->left && parent != NULL)
    			{
    				parent = parent->next;
    				pNode = pNode->next;
    			}
    			
    			return parent;
    		}
        }
    private:
        TreeLinkNode* GetLeftMost(TreeLinkNode* pNode)
    	{
            while(pNode->left != NULL)
    		{
    			pNode = pNode->left;
    		}
    		
    		return pNode;
    	}
    };
    
  • 相关阅读:
    缓存清理
    机器学习在电商领域三大应用,推荐,搜索,广告中商品排序
    并发和并行
    拷贝控制
    gitk
    git GUI Clients
    new delete
    Windows 安装 gcc
    C++ 运算符优先级
    iostream 操作符
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/12082964.html
Copyright © 2011-2022 走看看