二叉搜索树的第K大结点
来源:互联网 发布:uc java 编辑:程序博客网 时间:2024/06/07 07:56
题目:
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 / \ / \ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路:
二叉搜索树又称二叉排序树,如果根结点存在左结点,所有左结点小于根结点,如果根结点存在右结点,则所有右结点大于左结点。
基于二叉搜索树的这个特点,可以知道,二叉搜索树的中序遍历可以得到一个从小到大的序列。然后找到序列中第K个结点即可。
注:编程过程中,注意判断K的取值,以及根结点是否为空。以及二叉搜索树的结点个数是否大于K的值。
代码:
import java.util.ArrayList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { TreeNode pNode = null; //判断pRoot为空或者k<1时返回 null if(pRoot == null || k < 1) return pNode; ArrayList<TreeNode> list = Inoder(pRoot); //结点个数少于K时也返回null; if(list.size() < k) return pNode; else{ pNode = list.get(k - 1); } return pNode; } //中序遍历函数 public static ArrayList<TreeNode> Inoder(TreeNode pRoot){ ArrayList<TreeNode> result = new ArrayList<TreeNode>(); if(pRoot == null) return result; result.addAll(Inoder(pRoot.left)); result.add(pRoot); result.addAll(Inoder(pRoot.right)); return result; }}
阅读全文
0 0
- 二叉搜索树的第K大结点
- 【二叉树】二叉搜索树的第k个结点
- 面试题70:二叉搜索树第K大的结点*
- 二叉搜索树的第k个结点(二叉搜索树结点查找)
- 二叉搜索树第k个结点
- 【树14】二叉搜索树的第k个结点
- 剑指offerr--二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 《剑指offer》二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- 58.二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- ubuntu-输入正确的密码后重新返回到登陆界面
- Android开发---APP打开三方APP
- Java Spring 常见注解汇总
- 求1-5的和/积。1+2+3+4+5,1*2*3*4*5
- python lambda
- 二叉搜索树的第K大结点
- Oracle 11g RAC 安装数据库软件找不到节点的解决
- sqlserver 处理百万级以上的数据处理与优化
- MDK .map文件
- MM配置路线+事务码
- Maven笔记
- Android Camera之 --- Camera API说明(二)
- android studio中使用svn详解
- 银河英雄传说 洛谷P1196