面试题58-二叉树的下一个结点

来源:互联网 发布:禁用搜狗输入法云计算 编辑:程序博客网 时间:2024/05/22 03:22

题目描述

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

解法

中序遍历  左-根-右

1、右孩子不为空,则右孩子就是中序遍历的下一个节点

2、右孩子为空,则往上找它的父节点,如果父节点的左孩子为空,则父节点就是中序遍历的下一个节点;如果父节点的左孩子不为空,则再往上找父节点,重复

Code

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;        if(pNode->right!=NULL){            pNode=pNode->right;            while(pNode->left!=NULL)                pNode=pNode->left;            return pNode;        }        while(pNode->next!=NULL){            TreeLinkNode* tmp=pNode->next;            if(tmp->left==pNode)                return tmp;            pNode=tmp;        }        return NULL;    }};



0 0