二叉搜索树的第k个节点(java版)
来源:互联网 发布:手机端域名注册 编辑:程序博客网 时间:2024/06/07 05:43
【题目描述】给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
【解题思路1】
//1. 二叉搜素树的中序遍历访问队列,自然的满足升序排序的条件。
//2. 中序遍历二叉搜索树,暂存输出队列。
//3. 从保存的输出队列中找到满足条件的值。
import java.util.ArrayList;public class Solution { ArrayList<TreeNode> arr = new ArrayList<TreeNode>(); TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot==null|| k==0){ return null; } inOrder(pRoot); TreeNode tr = pRoot; if(k<=arr.size()){ tr = arr.get(k-1); }else{ return null; } return tr; } public void inOrder(TreeNode root){ if(root ==null){ return; } if(root.left != null){ inOrder(root.left); } arr.add(root); if(root.right != null){ inOrder(root.right); } }}
【解题思路2】
//1. 改进思路1,不再暂存所有输出。
//2. 改为设置一个计数器。中序遍历过程中,累加计算访问过的节点数目,当计数器等于要求的k时,则返回该节点。
public class Solution { int index = 0; //计数器 TreeNode KthNode(TreeNode root, int k) { if(root != null){ //中序遍历寻找第k个 TreeNode node = KthNode(root.left,k); if(node != null) return node; index ++; if(index == k) return root; node = KthNode(root.right,k); if(node != null) return node; } return null; }}
【解题思路3】
//1. 中序遍历非递归
import java.util.Stack;public class Solution { int count = 0; TreeNode KthNode(TreeNode pRoot, int k) { if(count > k || pRoot == null) return null; TreeNode p = pRoot; Stack<TreeNode> LDRStack = new Stack<TreeNode>(); TreeNode kthNode = null; while(p != null || !LDRStack.isEmpty()){ while(p != null){ LDRStack.push(p); p = p.left; } TreeNode node = LDRStack.pop(); System.out.print(node.val+","); count++; if(count == k){ kthNode = node; break; } p = node.right; } return kthNode; }}
阅读全文
0 0
- 二叉搜索树的第k个节点(java版)
- 二叉搜索树的第k个节点
- 二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 二叉搜索树的第k个节点
- 剑指offer-二叉搜索树的第K个节点
- 二叉搜索树的第K个节点
- 二叉搜索树的第K个节点
- Python:二叉搜索树的第k个节点
- 剑指offer63二叉搜索树的第k个节点
- 剑指offer_二叉搜索树的第k个节点
- 二叉搜索树的第k个节点
- 求二叉搜索树的第k个节点
- 二叉搜索树的第K个节点
- 剑指offer----二叉搜索树的第K个节点----java实现
- 剑指offer面试题63:二叉搜索树的第k个节点 Java实现
- 剑指offer-----找出二叉搜索树第k个节点(java版)
- 二叉搜索书的第K个节点
- VMware 网络配置(NAT)
- TCP/IP 1.概述
- gperftools-2.5.93
- 静态代码块在类被初始化时加载
- git提交node-modules报文件名过长无法提交问题
- 二叉搜索树的第k个节点(java版)
- 设备 eno16777736 似乎不存在, 延迟初始化操作
- Simple-Spring-Memcached(SSM) 的简单使用
- Flask中图片的刷新
- Clion打开新项目时Building symbols时间过长解决方案
- java 并发编程之volatile关键字
- Service(一)
- Chrome屏蔽广告
- js 检查登录名和密码