JZ8 二叉树的下一个结点

image
image

image
image

思路:
因为所有子节点都会指向父节点,所以从给定的那个节点pNode开始找,一直找到根节点root,然后用利用中序遍历,将该树的中序遍历序列存到一个容器中,然后对该容器进行遍历,找到指定节点的下一个节点。

#include <cstddef>
class Solution {
public:
vector<TreeLinkNode*> nodes;
//用户得到的输入只有一个 子树根节点
TreeLinkNode* GetNext(TreeLinkNode* pNode) {
TreeLinkNode* root = pNode;
//获取根节点
//顺着next指针一直找就可以了,因为next只会从子节点指向根节点
while(root->next )
root = root->next;
//中序遍历用nodes存储所有节点指针
InOrder(root);
int n = nodes.size();
for(int i = 0; i<n-1;i++)
{
TreeLinkNode* cur = nodes[i];
//将节点进行匹配
if(pNode == cur)
{
//如果有匹配到给出的节点,则下一个节点即返回结果
return nodes[i+1];
}
}
//否则如果没有下一个节点则返回NULL
return NULL;
}
//中序遍历
void InOrder(TreeLinkNode* root)
{
if(root==NULL)
return;
InOrder(root->left);
nodes.push_back(root);
InOrder(root->right);
}
};
posted @   蓝色的海嗷  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示