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

    二叉搜索树的特点、查找、插入、删除、建立空树:

    https://www.cnblogs.com/LydiammZuo/p/11893982.html

    1.递归(用二叉树的中序遍历)

    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
        public TreeNode(int val) {
            this.val = val;
        }
    }
    */
    public class Solution {
         int count=0;//计数器:当前访问了多少个结点
        TreeNode KthNode(TreeNode pRoot, int k)
        {
            if(pRoot!=null){ //中序遍历寻找第k个
                TreeNode node1=KthNode(pRoot.left,k);//左子树分支总返回给node1
                if(node1!=null) return node1;//将node1 return给上一层
                
                if(++count==k) return pRoot;//找到了第k小的结点
                
                TreeNode node2=KthNode(pRoot.right,k);//右子树分支总返回给node2
                if(node2!=null) return node2;
            }
            return null;//向上一层返回
        }
    }

    2.非递归中序遍历

    import java.util.*;
    public class Solution {
        TreeNode KthNode(TreeNode root, int k)
        {
            int count=0;
            if(root==null) return null;
            Stack<TreeNode>s=new Stack<>();
            TreeNode p=root;
            while(!s.isEmpty()||p!=null){
                if(p!=null){//根结点入栈、其左孩子存在则入栈
                    s.push(p);
                    p=p.left;
                }
                else {//栈不空的情况下出栈
                    p=s.pop();
                    if(++count==k) return p;//找到了第k小的结点就返回
                    p=p.right;//每次出栈都判断下该出栈节点的右孩子是否存在,存在则入栈
                }
            }
            return null;
        }
    
    
    }
  • 相关阅读:
    vs 加入插件
    vs用法
    axios和vue用$refs属性获取dom
    错误演示
    vue表单的用法

    工作
    工作日报
    主机与虚拟机链接
    login
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12654371.html
Copyright © 2011-2022 走看看