剑指offer | 训练题56:二叉树下一个结点

来源:互联网 发布:业务流程图的软件 编辑:程序博客网 时间:2024/06/01 07:56

题目描述

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

思路

这里写图片描述

/*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;        if(pNode->right != NULL){ //如果有右子树,找右子树中的最左结点            pNode = pNode->right;            while(pNode->left != NULL) pNode = pNode->left;            return pNode;        }        while(pNode->next != NULL){ //没有右子树,就找当前结点是其父节点左孩子的节点            if(pNode->next->left == pNode) return pNode->next;            pNode = pNode->next;        }        return NULL; //退到了根节点仍然没找到,说明该节点是最后一个节点,返回NULL    }};
原创粉丝点击