题目描述:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别别指向左右子节点的指针,还有一个指向父节点的指针
例如:这棵树的中序遍历是:D,B,H,E,I,A,F,C,G
解题思路:
(1)当节点的右子树不为空:节点的下一个节点就是这个节点的右子树中的最左子节点,也就是从右子节点出发一直沿着指向左子节点的指针,走到最后一个叶子节点就是此节点的下一个子节点
(2)当节点的右子树为空,并且是它父节点的右子树:沿着指向父节点的指针向上遍历,直到找到一个是它父节点的左子节点的节点,那么这个节点的父节点就是我们要找的下一个节点
(3)当结点的右子树为空,且是它父节点的左子节点时,它的下一个节点就是它的父节点
代码如下:
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
};
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==nullptr)//空树的情况
{
return n