57二叉树的下一个结点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
如果一个节点有右子树,那么他的下一个节点就是它的右子树中的最左节点。
如果一个节点没有右子树,如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点。
如果一个节点即没有右子树,并且它还是它父节点的右子节点,我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是他父节点的左子节点的节点。
1 /* 2 public class TreeLinkNode { 3 int val; 4 TreeLinkNode left = null; 5 TreeLinkNode right = null; 6 TreeLinkNode next = null; 7 8 TreeLinkNode(int val) { 9 this.val = val; 10 } 11 } 12 */ 13 public class Solution { 14 public TreeLinkNode GetNext(TreeLinkNode node){ 15 if(node == null) return null; 16 if(node.right!=null){ //1、右节点不为空 17 //node 的下一个节点就是 当前node的右子树中,最左的节点 18 node = node.right; 19 while(node.left!=null) 20 node = node.left; 21 return node; 22 } 23 else if(node.next!=null){//2右节点为空,分2种情况 24 //2.1、node是父节点的左子节点,那么node的下一个节点就是它的父亲节点。 25 if(node.next.left==node) return node.next; 26 //2.2、node 即没有右子树,并且是父节点的右子节点,沿着指针一直往上遍历, 27 //直到找到一个是他父节点的左子节点的节点。 28 if(node.next.right==node){ 29 while(node.next!=null){ 30 if(node.next.left==node) return node.next; 31 node = node.next; 32 } 33 } 34 } 35 return null; 36 } 37 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· https证书一键自动续期,帮你解放90天限制
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· 推荐几个不错的 Linux 服务器管理工具
· C# 开发工具Visual Studio 介绍