剑指Offer-57.二叉树的下一个结点(C++/Java)
Posted silentteller
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指Offer-57.二叉树的下一个结点(C++/Java)相关的知识,希望对你有一定的参考价值。
题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析:
二叉树的中序遍历是左根右,所以如果一个结点的右子树不为空,那么这个节点的下一个节点一定是右子树的最左结点,如果右子树不存在左子树的话,就返回右子树的根结点。
如果一个结点的右子树为空,且当前结点是其父结点的左子树的根结点,那么直接返回其父节点,否则就一直访问其父结点,直到找到一个结点是其父结点的左子结点,同样返回其父结点。
程序:
C++
class Solution { public: TreeLinkNode* GetNext(TreeLinkNode* pNode) { if(pNode == nullptr) return pNode; if(pNode->right != nullptr){ pNode = pNode->right; while(pNode->left != nullptr) pNode = pNode->left; return pNode; } while(pNode->next != nullptr && pNode->next->left != pNode){ pNode = pNode->next; } return pNode->next; } };
Java
public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode == null) return pNode; if(pNode.right != null){ TreeLinkNode p = pNode.right; while(p.left != null) p = p.left; return p; } while(pNode.next != null && pNode.next.left != pNode){ pNode = pNode.next; } return pNode.next; } }
以上是关于剑指Offer-57.二叉树的下一个结点(C++/Java)的主要内容,如果未能解决你的问题,请参考以下文章