博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】08二叉树的下一个节点,C++实现
阅读量:7068 次
发布时间:2019-06-28

本文共 1937 字,大约阅读时间需要 6 分钟。

原创博文,转载请注明出处!

# 题目

父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示。

# 思路

  • 如果节点有右子节点,则右子节点的最左节点是该节点的下一个节点。例如,寻找b的下一个节点的过程(b有右子节点e,e的左子节点是h,且h是e的最左节点,h是b的下一个节点)
  • 如果节点无右子节点,但该节点是父节点的左子节点,则父节点是该节点的下一个节点。例如,寻找d的下一个节点的过程(d无右子节点,d是父节点b的左子节点,则b是de的下一个节点)
  • 如果节点无右子节点,且该节点是父节点的右子节点,则沿着父节点的指针向上遍历。例如,寻找i的下一个节点的过程(i的父节点e,e是其父节点b的右子节点,节点b是其父节点a的左子节点,节点a是节点i的下一个节点)

# 代码

1 /*  2 struct TreeLinkNode {  3     int val;  4     struct TreeLinkNode *left;  5     struct TreeLinkNode *right;  6     struct TreeLinkNode *next;  7     TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {  8   9     } 10 }; 11 */ 12 class Solution { 13 public: 14     TreeLinkNode* GetNext(TreeLinkNode* pNode) 15     { 16         // 特殊输入 17         if(pNode == nullptr) 18             return nullptr; 19  20         /* 寻找结果 */ 21         // 如果节点有右子节点,则右子节点的最左节点是该节点的下一个节点 22         // 如果节点无右子节点,但该节点是其父节点的左子节点,则父节点是该节点的下一个节点 23         // 如果节点无右子节点,且该节点是其父节点的右子节点,则沿着父节点向上遍历,满足XXX的父节点是其该节点的下一个节点 24         TreeLinkNode * res = nullptr; 25         if(pNode->right != nullptr) 26         { 27             TreeLinkNode* node_right = pNode->right; 28             while(node_right ->left != nullptr) 29             { 30                 node_right = node_right->left; 31             } 32             res = node_right; 33         } 34  35         else if(pNode->next != nullptr) 36         { 37             // 当前节点和当前节点的父节点 38             TreeLinkNode * current = pNode; 39             TreeLinkNode * parent = pNode->next; 40  41             while(parent!=nullptr && current == parent->right) 42             { 43                 current = parent; 44                 parent = parent ->next; 45             } 46  47             res = parent; 48         } 49         return res; 50     } 51 };
View Code

# 复杂度

 

# 测试用例

  • 空节点
  • 特殊二叉树(只有一个节点的二叉树、只有左子节点的二叉树、只有右子节点的二叉树、完全二叉树和不完全二叉树)
  • 不同位置的节点的下一个节点(下一个节点是当前节点右子节点、右子树的最左子节点、父节点、跨层父节点、无下一个节点)

 

转载于:https://www.cnblogs.com/wanglei5205/p/9068827.html

你可能感兴趣的文章
IDEA Git版本回滚提交方式
查看>>
tomcat中同时启动两个项目出现内存不足的错误提示解决办法
查看>>
ssm框架开发过程中遇到的一错误以及解决问题提示
查看>>
树的遍历
查看>>
Akka2使用探索6(Futures)——实现并发和异步
查看>>
【持续更新】jQuery 实用技巧
查看>>
大象也能起舞,Citrix X1计划让你对笔记本电脑say good bye
查看>>
Nginx 之常见报错问题解决
查看>>
linux 防爆破方法
查看>>
2、通过ipmitool工具修改IPMI的WEB密码
查看>>
云盘关闭,教你用蒲公英搭建私有云
查看>>
Spring Cloud 入门教程5、服务容错监控:Hystrix Dashboard
查看>>
很好的学习平台
查看>>
hibernate学习笔记3
查看>>
SQL Server 2005 日常运维检查操作手册
查看>>
利用jquery和jsonp来获取跨站数据,并实现cookie共享
查看>>
我的友情链接
查看>>
写sql语句时将时间格式“20110725”转化为格式2012年07月25日
查看>>
[Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
查看>>
heartbeat高可用+lvsDR
查看>>