题目
给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。
知识点
一个节点的后继节点是指,这个节点在中序遍历序列中的下一个节点。
给定一棵二叉树:中序遍历结果为{4,7,2,1,5,3,8,6}
再给一个数,求该节点中序遍历中的下一个节点。
根据中序遍历的性质,如果给定的节点有右子树,该节点的下一个节点就是右子树的最左子节点。如1的下一个节点就是5.
如果给定的节点没有右子树,如7,那么根据指向父节点的指针往上回溯,直到找到有个节点(包括该给定节点)是它的父节点的左子节点,它的父节点就是给定节点的下一个节点。
举个栗子。
如7往上找,7是4的右子节点,4是2的左子节点,因此2是7的下一个节点。
8往上找,因为8本身就是6的左子节点,因此6是8的左子节点。
6没有右子树,6往上找,6是3的右子节点,3是1的右子节点,1没有父节点,因此6的下一个节点为null。
代码实现
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode *parent;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Soluti