JZ8 二叉树的下一个结点
思路:
因为所有子节点都会指向父节点,所以从给定的那个节点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); } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程