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

    题目描述

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

    思路

    利用二叉搜索数中序遍历有序的特点。

    用递归和迭代分别实现中序遍历。

    代码实现

    package Tree;
    
    import java.util.Stack;
    
    /**
     * 二叉搜索树的第k个结点
     * 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 /  3 7 / / 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
     * 思路:
     * 利用二叉搜索数中序遍历有序的特点。
     */
    public class Solution49 {
        private int cnt;
        private TreeNode res;
    
        /**
         * 迭代中序遍历
         *
         * @param pRoot
         * @param k
         * @return
         */
        TreeNode KthNode_2(TreeNode pRoot, int k) {
            if (pRoot == null || k == 0)
                return null;
            int cnt = 0;
            Stack<TreeNode> stack = new Stack<>();
            while (pRoot != null || !stack.isEmpty()) {
                while (pRoot != null) {
                    stack.push(pRoot);
                    pRoot = pRoot.left;
                }
                pRoot = stack.pop();
                cnt++;
                if (cnt == k) return pRoot;
                pRoot = pRoot.right;
            }
            return null;
        }
    
        TreeNode KthNode(TreeNode pRoot, int k) {
            inOrder(pRoot, k);
            return res;
        }
    
        /**
         * 递归中序遍历
         *
         * @param pRoot
         * @param k
         */
        void inOrder(TreeNode pRoot, int k) {
            if (pRoot == null) return;
            if (cnt > k) return;
            inOrder(pRoot.left, k);
            cnt++;
            if (cnt == k) res = pRoot;
            inOrder(pRoot.right, k);
        }
    
        public class TreeNode {
            int val = 0;
            TreeNode left = null;
            TreeNode right = null;
    
            public TreeNode(int val) {
                this.val = val;
    
            }
    
        }
    }
    
    
  • 相关阅读:
    2. 商城项目完整购物链路 lq
    如何看源码? lq
    事务的了解 lq
    1. 商城业务架构分析 lq
    并发的基础知识 lq
    mysql 索引 lq
    mysqlinnodb了解 lq
    IE6.0、IE7.0 与FireFox CSS兼容的解决方法
    CSS:html/css教程:背景图片的定位问题详解
    IE6 BUG
  • 原文地址:https://www.cnblogs.com/wupeixuan/p/8867010.html
Copyright © 2011-2022 走看看