题解 | #二叉树的下一个结点#
二叉树的下一个结点
https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e
解题思路
- 先向前寻找,直至找到根节点;
- 中序遍历数;
- 在遍历后的结果内查找是否有目标节点,如果有则返回其下一个节点;
- 否则,返回空。
复杂度
- 时间复杂度为O(n);
- 空间复杂度为O(n)。
代码
Python
class Solution:
node = []
def inOrder(self, root):
if root is None:
return
self.inOrder(root.left)
self.node.append(root)
self.inOrder(root.right)
def GetNext(self, pNode):
root = pNode
# 从后往前找,直到根节点
while root.next:
root = root.next
# 中序遍历得到结果
self.inOrder(root)
# 找到匹配的结果,并返回其下一个节点
for i in range(len(self.node)-1):
cur = self.node[i]
if pNode == cur:
return self.node[i+1]
return None
C++
class Solution {
public:
vector<TreeLinkNode*> res;
void inOrder(TreeLinkNode* root)
{
if(root == NULL)
{
return ;
}
inOrder(root->left);
res.push_back(root);
inOrder(root->right);
}
TreeLinkNode* GetNext(TreeLinkNode* pNode) {
TreeLinkNode* root = pNode;
while(root->next)
{
root = root->next;
}
inOrder(root);
for(int i = 0; i < res.size(); i++)
{
if(res[i] == pNode)
{
return res[i+1];
}
}
return NULL;
}
};

