二叉树的下一个节点

tc_goshawk tc_goshawk     2022-11-29     297

关键词:

题目描述

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

 

解题思路:

情况一、所给的节点的右子树不是空,则顺着找最小的

情况二、所给的节点右子树是空,且是左儿子则返回父节点

情况三、所给的节点右子树是空,且是右儿子且父亲是祖父的左儿子,则返回祖父节点

 

class Solution 
public:
    TreeLinkNode* getRoot(TreeLinkNode* pNode)
        TreeLinkNode* root = NULL;
        while(pNode != NULL)
            root = pNode;
            pNode = pNode->next;
        
        return root;
    
    TreeLinkNode* _getNext(TreeLinkNode* root, TreeLinkNode *pNode)
        if(root == NULL) return NULL;
//        cout<<"rval="<<root->val<<endl;
        if(root == pNode)
            TreeLinkNode * res = NULL;
            if(root->right != NULL)
                //当前节点的右子树不是空则顺着找最左的节点
                res = root->right;
                while(res != NULL)
                    if(res->left != NULL)
                        res = res->left;
                    else
                        break;
                    
                
            else
                if(root->next != NULL)
                    if(root->next->left == root)
                        //如果当前节点的右子树为空且当前节点是左子树
                        return root->next;
                    else if(root->next->right == root && root->next == root->next->next->left)
                        //如果当前节点的右子树为空,当前节点是右子树且父节点是祖父的左子树
                        return root->next->next;
                    
                
            
//            cout<<"xxx"<<endl;
            return res;
        else

            TreeLinkNode* lRes = NULL;
            if(root->left != NULL)
                lRes = _getNext(root->left, pNode);
            
            TreeLinkNode * rRes = NULL;
            if(root->right != NULL)
                rRes = _getNext(root->right, pNode);
            
            if(lRes != NULL)
                return lRes;
            else if(rRes != NULL)
                return rRes;
            else
                return NULL;
            
        
    
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    
        TreeLinkNode *root = getRoot(pNode);
        return _getNext(root, pNode);
    
;

  

剑指offer-二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分析二叉树的下一个节点,一共有以下情况:二叉树为空,则... 查看详情

剑指offer第7题二叉树的下一个节点

【题目】给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。注意:如果给定的节点是中序遍历序列的最后一个,则返回空节点;二叉树一定不为空,且给定的节点一定不是空节点;样例假定二叉树是:[2,1,3,null... 查看详情

二叉树的下一节点

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针思路:.二叉树为空,则返回空;节点右孩子存在,则设置一个指针从... 查看详情

57二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果一个节点有右子树,那么他的下一个节点就是它的右子... 查看详情

19.二叉树的下一个节点

 1.如果一个结点有右子树,那么它的下一个结点就是它的右子树的最左子结点。2.如果当前节点没有右儿子,我们可以沿着指向父结点的指针一直向上遍历,直到找到一个是它父结点的左子结点的结点。   查看详情

二叉树的下一个节点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路:情况一、所给的节点的右子树不是空,则顺着找最... 查看详情

二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:1.如果给定节点有右子树,那么右子树上面的最左节点... 查看详情

二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 1/*2publicclassTreeLinkNode3intval;4TreeLinkNodeleft=null;5TreeLinkNoderight=null... 查看详情

二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路首先知道中序遍历的规则是:左根右,然后作图 1.若当前... 查看详情

二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。树见书P275分三种情况:1.该节点有右子树,下一个结点就是它右子... 查看详情

面试题:二叉树的下一个节点(代码片段)

题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路://包含指向父节点的指针//node.nextnode.leftnode.rightpublicclassSo... 查看详情

剑指offer——06二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题目的意思是,在一颗二叉树的中序遍历中,给出其中一个节... 查看详情

面试题8:二叉树的下一个节点(代码片段)

一.题目给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。二.思路分析题目之后,我们发现,待处理节点只存在三种... 查看详情

二叉树的下一个结点(代码片段)

...语言2秒空间限制:C/C++32M,其他语言64M题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:中序遍历:左中右,... 查看详情

剑指offer(书):二叉树的下一个节点(代码片段)

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析:若一个节点有右子树,那么他的下一个节点就是他右子树中的... 查看详情

剑指offer:二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。classTreeLinkNode:def__init__(self,x):self.val=xself.left=Noneself.right=Noneself.paren... 查看详情

剑指offer二叉树的下一个结点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 思路:1)如果一个节点有右子树,那么它的下一个结点就是... 查看详情

剑指offer-二叉树的下一个节点(代码片段)

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 ①节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着... 查看详情