题目如下所示:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
它的数据结构如下所示:
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
乍一看,很简单嘛,不就是根据中序遍历求给出的节点的下一个节点,更何况题目已经把它的父节点用next指针指出来了。只要根据中序遍历的规则来求就可以了,但是万万没想到的是,我在做这道题目时,明明考虑的很清楚,很全面了,但是还是会出现下图的情况:
这让我很抓狂,我不明白为什么会出现以下的情况,我不断的模拟运行着代码,甚至还在vs中编写了一个二叉树的程序来运行我写的代码,但是运行出来的都是正确的,这让我陷入深深的思考,我觉得语法上应该没有什么问题,所以我在想是不是有一种极为特殊的情况导致这个代码出现这种情况,终于在我试了很多种极端情况下,终于让我发现一种情况下会出现这样的状况,即