- 题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
- 思路:
-
中序遍历是先左子树,然后root,然后右子树
-
对于一个节点而言,中序遍历的下一个节点,如果有右子树,那就是右字数的最左边的节点
-
如果没有右子树,那就是自己的爸爸,如果没有爸爸,那就是空
-
- 代码:
/* 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) { //中序遍历是先左子树,然后root,然后右子树 //对于一个节点而言,中序遍历的下一个节点,如果有右子树,那就是右字数的最左边的节点 //如果没有右子树,那就是自己的爸爸,如果没有爸爸,那就是空 if (pNode->right) { TreeLinkNode* temp = pNode->right; while (temp->left) { temp = temp->left; } return temp; } else if (pNode->next) { int target = pNode->val; while(pNode && pNode->val <= target){ pNode = pNode->next; } return pNode; } else return NULL; } };
剑指offer 56.二叉树的下一个结点
最新推荐文章于 2022-10-03 23:07:37 发布