微软高频面试题 二叉树的下一个节点 (剑指offer面试题8)

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

规律:1. 如果有右儿子,下一个是右儿子最左边的节点‘

2. 如果没有右儿子

(1) 如果是父亲节点的左儿子,下一个是父亲节点。

(2) 如果一个节点没有右子树,且它是父节点的右子结点,则沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子结点的节点。如果这个节点存在,则它的父节点是我们要找的节点。

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode){
        if(pNode==NULL) return NULL;
        if(pNode->right){
            auto qNode = pNode->right;
            while(qNode->left!=NULL){
                qNode = qNode->left;
            }
            return qNode;
        }
        else if(pNode->next!=NULL){
            auto q = pNode;
            auto pParent = pNode->next;
            while(pParent!=NULL&&q==pParent->right) {
                q = pParent;
                pParent = pParent->next;
            }
            return pParent;
        }else{
            return NULL;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/108478495
今日推荐