《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
来源:互联网 发布:atom php常用插件 编辑:程序博客网 时间:2024/06/11 04:45
题目:给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
解析:看到我写的下面的代码,像一篇文章一样的长,我也是醉了,先提交上去了。思想就是先来个层次遍历二叉树,得到所有的节点的值,然后再排序,取到第k大的节点的值。当然这个只是值,而不是节点,需要得到具体的节点信息,我们需要再重新遍历下该二叉树,得到节点值为该值的节点,然后返回。
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/import java.util.*;public class Solution { TreeNode KthNode(TreeNode pRoot, int k) { if(k==0){ return null; } List<Integer> list = new ArrayList<>();//存节点的值 Queue<TreeNode> queue = new LinkedList<>();//存节点 if(pRoot==null){ return null; } queue.add(pRoot); int current =1; int next=0; while (!queue.isEmpty()){//层次遍历二叉树,然后得到所有节点的值 TreeNode node=queue.poll(); current--; list.add(node.val); if(node.left!=null){ queue.add(node.left); next++; } if(node.right!=null){ queue.add(node.right); next++; } if(current==0){ current=next; next=0; } } Collections.sort(list);//给遍历的二叉树值的list排序,得到第k大的节点信息 if(k>list.size()){ return null; } int num=list.get(k-1); queue.clear(); queue.add(pRoot); current=1; next=0; TreeNode result=null; while (!queue.isEmpty()){ TreeNode node=queue.poll(); current--; if(node.val==num){//找到第k大的节点信息,然后返回 result=node; return result; } if(node.left!=null){ queue.add(node.left); next++; } if(node.right!=null){ queue.add(node.right); next++; } if(current==0){ current=next; next=0; } } return result; }}
阅读全文
0 0
- 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
- 给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
- 《剑指offer》二叉搜索树的第k个结点
- 剑指offer:二叉搜索树的第k个结点
- [剑指offer]二叉搜索树的第k个结点
- 剑指offer-二叉搜索树的第k个结点
- 【剑指Offer】二叉搜索树的第k个结点
- 剑指offer 二叉搜索树的第k个结点
- 剑指Offer:二叉搜索树的第K个结点
- 剑指offer-二叉搜索树的第k个结点
- 剑指Offer------二叉搜索树的第k个结点
- 剑指offer---二叉搜索树的第k个结点
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- 二叉搜索树的第K大结点
- 找出二叉搜索树第k大的节点
- 剑指offer 63题 【树】二叉搜索树的第k个结点
- 《剑指offer》刷题笔记(树):二叉搜索树的第k个结点
- 剑指offer面试题目63(二叉搜索树的第k个结点)
- 关于Matlab中double类型图像的后续处理问题
- Python深拷贝和浅拷贝
- PB:关于游标的使用
- 代码走查工具FindBugs, PMD,CheckStyle
- JLIKN固件修复
- 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
- RBAC数据库设计
- 扩展阅读 眼界与可以做的事
- How Many Sets
- (hdu1573)X问题(中国剩余定理+扩展欧几里得算法)
- 探索C++对象模型
- java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.g
- feof()和EOF的用法—— C中文件结尾的判断
- 文章标题nodejs-002nodejs数据类型