剑指offer 面试题8:二叉树的下一个节点 c++

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

解析:三种情况:1.若节点有右子树,中序下一个就是 右子树最左孩子节点  2.若无右子树,且当前节点是父节点的左子节点,下一个就是父节点   3.无右子树,且当前节点是父节点的右子节点,那下一个就是 父节点的父节点,一直往上找, 一直找到根,说明当时节点是树的最右节点,中序 遍历无下一个节点。写法上第2中和第3中可以合并一起写

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode == nullptr) return nullptr;
        TreeLinkNode *ret=nullptr;
        if(pNode->right!=nullptr)
        {
            TreeLinkNode *pcur = pNode->right;
            while(pcur && pcur->left)
            {
                pcur=pcur->left;
            } ret = pcur;
        }else if(pNode->next)  //右子树为空 且父节点不空
        {
            TreeLinkNode *pcur=pNode,*parent=pNode->next;
            while(parent && parent->right == pcur) //父节点不空
            {
                pcur = parent;
                parent = parent->next;
            }
            ret = parent;
        }return ret;
    }
};

https://www.nowcoder.com/profile/9695725/codeBookDetail?submissionId=37384915

猜你喜欢

转载自blog.csdn.net/qq_21997625/article/details/84295234