题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
我的思路:
1、先验证输入的结点是否为空,空则返回NULL
2、判断输入节点是叶子结点还是非叶子结点:
3、如果是叶子结点的话判断该节点是左孩子还是右孩子
左孩子的情况: 返回父结点
右孩子的情况:返回祖先是左孩子时的父结点,如果没有祖先是左孩子(即输入的节点是最后一个元素)返回NULL
4、如果是非叶子结点则找输入结点的右孩子的最左端的左孩子
输入的结点情况分析:
左孩子 | 父结点 | 右孩子 | 结点位置 |
---|---|---|---|
0 | 0 | 0 | 空节点 |
0 | 0 | 1 | 根节点 |
0 | 1 | 0 | 叶子结点 |
0 | 1 | 1 | 非叶子结点 |
1 | 0 | 0 | 根节点 |
1 | 0 | 1 | 根节点 |
1 | 1 | 0 | 非叶子结点 |
1 | 1 | 1 | 非叶子结点 |
代码:
/*
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