53.二叉树的下一个结点

二叉树的下一个结点
  • 参与人数:1605时间限制:1秒空间限制:32768K
  •  算法知识视频讲解

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
参考《剑指offer上》的解析
using namespace std;
/*
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 NULL ;
        
        TreeLinkNode* pRet = NULL ;
        if ( pNode -> right != NULL ) {
            TreeLinkNode* tmp = pNode -> right ;
            while ( tmp -> left != NULL ) {
                tmp = tmp -> left ;
            }
            pRet = tmp ;
        } else if ( pNode -> next != NULL ) {
            TreeLinkNode* pCur = pNode ;
            TreeLinkNode* pPar = pNode -> next ;
            while ( pPar != NULL && pCur == pPar -> right ) {
                pCur = pPar ;
                pPar = pPar -> next ;
            }
            pRet = pPar ;
        }
        return pRet ;
    }
};


你可能感兴趣的:(53.二叉树的下一个结点)