剑指Offer之寻找二叉搜索树的第k个节点
寻找二叉树的第k个节点
- 1、题目描述
- 2、解析
- 3、代码
- 3.1、中序遍历
- 3.2、利用堆栈
1、题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
2、解析
这题意思很明确,在一个二叉搜索树中寻找第k小的结点。首先要知道二叉搜索树的定义,根节点大于等于左孩子,根节点小于等于右孩子。
那这题可以把这个二叉搜索树中序遍历,然后再直接取出第k个节点。
3、代码
3.1、中序遍历
/*
public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}
*/
import java.util.ArrayList;
public class Solution {ArrayList<TreeNode> list = new ArrayList<>();TreeNode KthNode(TreeNode pRoot, int k){addNode(pRoot);//尝试使用递归查找if(k>=1 && list.size()>=k)return list.get(k-1);elsereturn null; }//对二叉树进行中序遍历void addNode(TreeNode cur){if(cur!=null){addNode(cur.left);list.add(cur);addNode(cur.right); } }
}
注意返回第k-1是因为数组长度减1才是我们要的节点。
3.2、利用堆栈
import java.util.Stack;
public class Solution {TreeNode KthNode(TreeNode pRoot, int k){if(pRoot == null || k <= 0){return null;}Stack<TreeNode> stack = new Stack<>(); //建立栈TreeNode cur = pRoot;//while 部分为中序遍历while(!stack.isEmpty() || cur != null){ if(cur != null){stack.push(cur); //当前节点不为null,应该寻找左儿子cur = cur.left;}else{cur = stack.pop();//当前节点null则弹出栈内元素,相当于按顺序输出最小值。if(--k == 0){ //计数器功能return cur;}cur = cur.right;}}return null;}
}
这个方法还没看懂,再说吧。
剑指Offer之寻找二叉搜索树的第k个节点相关推荐
- 【刷题-剑指 Offer】 54. 二叉搜索树的第k大节点
题目 给定一棵二叉搜索树,请找出其中第k大的节点. 我的解法:(中序遍历) /*** Definition for a binary tree node.* public class TreeNode ...
- 《剑指Offer》51. 二叉搜索树的第k个结点
题目:51. 二叉搜索树的第k个结点 知识点:二叉搜索树 题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为 ...
- 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
[LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...
- 剑指 Offer II 055. 二叉搜索树迭代器
链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...
- 剑指offer 27: 二叉搜索树与双向链表
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 递归调用左子树: 把原左节点的指针调整为指向链表中指向前一个节点 ...
- 剑指offer 24:二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 二叉搜索数的定义:左节点比根节点小,右节 ...
- 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 【剑指offer】_09二叉搜索树的后序遍历序列
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 比如下面的这棵二叉搜索树 它的后序遍历为 ...
- 二叉搜索时与双向链表python_【剑指offer】26 二叉搜索树与双向链表
- 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. - 解题思路 递归 - Java实现 /**public class ...
最新文章
- 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
- ICCV2021最佳检测之一:主动学习框架较大提升目标检测精度(附论文下载)
- wxWidgets:wxComboBox类用法
- Apollo创建项目
- 【C#/.NET】.NET6中全局异常处理
- 学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...
- 面试官:Redis熟悉吗?谈谈Redis都有哪些性能监控指标
- C#保存图片到数据库,读取图片显示
- hp服务器系统如何用u盘恢复,软硬件技巧 篇三:HP战66之恢复U盘制作,以及恢复系统之体验感想...
- GeoPandas入门 | 03-空间关系和操作
- 车辆路径跟踪算法及数学模型
- youtube python 中文_GitHub - dousirui001/youtube-streaming-translator-python: 实时翻译油管直播,开发中...
- 运放放大倍数计算公式_运放选型速记指南
- 小刘同学的 virtuoso IC 618 版图初学
- 假华为手机窝点被查!画面不忍直视
- Aspack壳代码分析
- 华为——IS-IS理论+实验,L1,L2,L1-2彼此之间的邻居关系建立
- 更改计算机一级密码,详细教您如何更改win10系统电脑密码
- BatchNorm的作用--原理详解
- Edwards推出市场上抽吸速度最高的新款紧凑型干式真空泵