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

来源:互联网 发布:点阵字符软件 编辑:程序博客网 时间:2024/05/01 15:47

题目描述

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

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 *nextNode = NULL;        if (pNode->right){            TreeLinkNode* rightNode = pNode->right;            while (rightNode->left){                rightNode = rightNode->left;            }            nextNode = rightNode;        }        else if (pNode->next){            TreeLinkNode* pCur = pNode;            TreeLinkNode* parent = pCur->next;            //根节点的父节点为NULL            while (parent && pCur == parent->right){                pCur = parent;                parent = parent->next;            }            nextNode = parent;        }        return nextNode;    }};
0 0
原创粉丝点击