
不带parent指针的successor(后继)求解
初始化一个栈,压栈顺序为根节点。 进行中序遍历,先遍历左子树,再遍历当前节点,最后遍历右子树。 在弹出节点时,检查是否是目标节点,如果是,记录下一个弹出节点的值作为后继。 如果在弹出过程中没有找到目标节点,返回-1。 初始化栈:将根节点压入栈中。 遍历过程:在弹出节点时,首先检查是否是目标节点。如果是,记录下一个弹出节点的值作为后继。 处理右子树:如果当前节点不是目标节点,继续压栈右子树节点,进行后续遍历。 返回结果:如果在弹出过程中找到目标节点,返回下一个弹出节点的值;否则返回-1。
发布日期:2021-05-07 22:02:53
浏览次数:22
分类:精选文章
本文共 1657 字,大约阅读时间需要 5 分钟。
为了找到二叉树中指定结点的下一个结点(即中序遍历的后继),我们可以采用中序遍历的方法。以下是详细的解决方案:
方法思路
我们可以使用中序遍历的非递归实现来解决这个问题。中序遍历的非递归形式使用栈来模拟递归过程,这样我们可以在中序遍历过程中记录节点的顺序。当我们找到目标节点时,记录下一个弹出节点的值作为后继。
具体步骤如下:
解决代码
import java.util.Stack;public class Main { public static void main(String[] args) { TreeNode root = new TreeNode(10); TreeNode l = new TreeNode(7); TreeNode r = new TreeNode(14); TreeNode ll = new TreeNode(1); TreeNode lr = new TreeNode(9); TreeNode rl = new TreeNode(13); TreeNode rll = new TreeNode(11); root.left = l; root.right = r; l.left = ll; l.right = lr; r.left = rl; rl.left = rll; System.out.println(findSuccessor(root, 14)); } private static int findSuccessor(TreeNode root, int p) { if (root == null) return -1; Stackstack = new Stack<>(); stack.push(root); boolean found = false; while (!stack.isEmpty()) { while (!stack.isEmpty()) { TreeNode node = stack.pop(); if (node.val == p) { found = true; } if (found) { return node.right != null ? node.right.val : -1; } if (node.right != null) { stack.push(node.right); } } } return -1; }}
代码解释
这种方法高效且简洁,能够在O(n)时间复杂度内找到中序遍历的后继节点。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月18日 09时29分42秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
将你的前端应用打包成docker镜像并部署到服务器?仅需一个脚本搞定
2019-03-06
【俗话说】换个角度理解TCP的三次握手和四次挥手
2019-03-06
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2019-03-06
从RocketMQ的Broker源码层面验证一下这两个点
2019-03-06
如何正确的在项目中接入微信JS-SDK
2019-03-06
初探WebAssembly
2019-03-06
关于Objects类的getClass方法为什么可以得到子类的地址的思考
2019-03-06
239. 滑动窗口最大值
2019-03-06
纵览全局的框框——智慧搜索
2019-03-06
手把手教你如何快速构建应用内消息推送与运营能力
2019-03-06
快服务流量之争:如何在快服务中占领一席之地
2019-03-06
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2019-03-06
Cocos平台集成AGC性能管理(二)—— 性能管理SDK集成
2019-03-06
华为推送服务 | 简单一招,提高用户活跃和留存
2019-03-06
基于Cocos SDKHub接入华为HMS Game服务—打包上架流程
2019-03-06
Unity平台 | 快速集成华为性能管理服务
2019-03-06
做好付费预测,揭开用户转化的关键秘密
2019-03-06
华为预测服务新版本上线!自定义预测轻松满足您的个性化需求
2019-03-06
详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
2019-03-06
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2019-03-06