zoukankan      html  css  js  c++  java
  • 算法 - 二叉搜索树的第k个结点

    题目

    给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。

    解题思路

    使用栈存储数据,循环比较数据和栈里面数据大小,大于就出栈,一直找到当前数据应该呆的位置,然后再将出栈的数据放回来。

    编码

    
        private static TreeNode KthNode(TreeNode pRoot, int k) {
            if (k == 0) {
                return null;
            }
    
            Stack<TreeNode> stack = new Stack<>();
            recursive(pRoot, k, stack);
            if (stack.size() < k) {
                return null;
            }
            return stack.get(k - 1);
        }
    
        private static void recursive(TreeNode node, int k, Stack<TreeNode> stack) {
            if (node == null) {
                return;
            }
    
            // 存储临时出栈的节点
            Stack<TreeNode> tempStack = new Stack<>();
            // 找位置:依次比较当前节点值和栈里已经有的值 小于就出栈
            for (int i = stack.size(); i > 0 && node.val < stack.peek().val; i--) {
                tempStack.push(stack.pop());
            }
    
            // 入栈
            stack.push(node);
    
            // 将出栈的数据再放回来
            for (int i = tempStack.size(); i > 0 && stack.size() < k; i--) {
                stack.push(tempStack.pop());
            }
    
            // 递归
            recursive(node.left, k, stack);
            recursive(node.right, k, stack);
        }
    
    
  • 相关阅读:
    UE4 Cel Shading(卡通渲染)
    UE4 常用数学
    锈迹材质全流程实例:Blender-》SP-》UE4
    ue4 优化建议与经验
    VisualStudio开发UE4工程设置
    Procedural Mesh Component in C++:Getting Started
    Java容器有哪些?
    java 连接mongodb
    mongodb 系列 ~ mongo 用户验证系列
    mongodb连接认证失败
  • 原文地址:https://www.cnblogs.com/paper-man/p/13284575.html
Copyright © 2011-2022 走看看