首页 > 代码库 > 57、剑指offer--二叉树的下一结点
57、剑指offer--二叉树的下一结点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解题思路:两种情况,若果一个结点有右子树,那么其下一个结点为它的右子树中的最左节点;
若一个结点无右子树,两种情况:1)如果结点是其父结点的左子结点,那么它的下一结点为其父节点;2)如果结点是其父结点的右子节点,则沿着父节点向上遍历直到,找到一个是它父结点的左子结点的结点,如果找到,这个结点的父节点即为下一结点
1 /* 2 struct TreeLinkNode { 3 int val; 4 struct TreeLinkNode *left; 5 struct TreeLinkNode *right; 6 struct TreeLinkNode *next; 7 TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) { 8 9 } 10 }; 11 */ 12 class Solution { 13 public: 14 TreeLinkNode* GetNext(TreeLinkNode* pNode) 15 { 16 if(pNode == NULL) 17 return NULL; 18 TreeLinkNode *pNext = NULL; 19 //有右结点,其下一结点为右结点的最左子结点 20 if(pNode->right != NULL) 21 { 22 TreeLinkNode *pRight = pNode->right; 23 while(pRight->left != NULL) 24 pRight = pRight->left; 25 pNext = pRight; 26 } 27 //无右结点 28 else 29 { 30 TreeLinkNode *pCurrent = pNode; 31 TreeLinkNode *pParent = pNode->next; 32 while(pParent != NULL && pCurrent == pParent->right)//是父结点的右子结点,沿父结点一直向上查找 33 { 34 pCurrent =pParent; 35 pParent = pParent->next; 36 } 37 pNext = pParent; 38 } 39 return pNext; 40 } 41 };
57、剑指offer--二叉树的下一结点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。