栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法心得----后继者(中序遍历+双指针)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法心得----后继者(中序遍历+双指针)

题目描述

思路

题目很明显是需要中序遍历,这里需要找到中序遍历中,指定节点的后继节点(中序遍历的顺序是:左根右),即,可能会存在寻找左子节点的父节点情况,这里,最简单容易想到的是双指针+中序遍历非递归,其中一个指针用来遍历,另一个指针则指向当前遍历节点的上一个节点

代码
 class Solution {
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
    	//创建一个栈
        Deque stack = new ArrayDeque();
        //创建双指针
        TreeNode prev = null, curr = root;
        while (!stack.isEmpty() || curr != null) {
            while (curr != null) {
                //将所有左子节点入栈
                stack.push(curr);
                curr = curr.left;
            }
            
            curr = stack.pop();
            if (prev == p) {
                return curr;
            }
            prev = curr;
            curr = curr.right;
        }
        return null;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号