题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 算法:中序遍历
- 数据结构:二叉树
编程语言:C++
/* 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==nullptr) return nullptr; TreeLinkNode *pres=nullptr;//用于存储最终的结果 //第一种情况,如果存在右子树,下一个访问的节点是右子树的最左叶子节点 if(pNode->right!=nullptr) { pres=pNode->right; while(pres->left!=nullptr) { pres=pres->left; } } //如果没有右子树, else if(pNode->next!=nullptr) { TreeLinkNode *current=pNode; TreeLinkNode *parent=pNode->next; while(parent!=nullptr&¤t==parent->right) { current=parent; parent=parent->next; } pres=parent; } return pres; } };