题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分析:
二叉树的中序遍历是左根右,所以如果一个结点的右子树不为空,那么这个节点的下一个节点一定是右子树的最左结点,如果右子树不存在左子树的话,就返回右子树的根结点。
如果一个结点的右子树为空,且当前结点是其父结点的左子树的根结点,那么直接返回其父节点,否则就一直访问其父结点,直到找到一个结点是其父结点的左子结点,同样返回其父结点。
程序:
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; } }
原文地址:https://www.cnblogs.com/silentteller/p/12114894.html
时间: 2024-10-08 00:12:16