寻找二叉树的第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个节点相关推荐

  1. 【刷题-剑指 Offer】 54. 二叉搜索树的第k大节点

    题目 给定一棵二叉搜索树,请找出其中第k大的节点. 我的解法:(中序遍历) /*** Definition for a binary tree node.* public class TreeNode ...

  2. 《剑指Offer》51. 二叉搜索树的第k个结点

    题目:51. 二叉搜索树的第k个结点 知识点:二叉搜索树 题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为 ...

  3. 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

    [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...

  4. 剑指 Offer II 055. 二叉搜索树迭代器

    链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...

  5. 剑指offer 27: 二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 递归调用左子树: 把原左节点的指针调整为指向链表中指向前一个节点 ...

  6. 剑指offer 24:二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 二叉搜索数的定义:左节点比根节点小,右节 ...

  7. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...

  8. 【剑指offer】_09二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 比如下面的这棵二叉搜索树 它的后序遍历为 ...

  9. 二叉搜索时与双向链表python_【剑指offer】26 二叉搜索树与双向链表

    - 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. - 解题思路 递归 - Java实现 /**public class ...

最新文章

  1. 《繁凡的深度学习笔记》前言、目录大纲 一文让你完全弄懂深度学习所有基础(DL笔记整理系列)
  2. ICCV2021最佳检测之一:主动学习框架较大提升目标检测精度(附论文下载)
  3. wxWidgets:wxComboBox类用法
  4. Apollo创建项目
  5. 【C#/.NET】.NET6中全局异常处理
  6. 学生机房管理服务器系统设计,广东工业大学数据库课程设计机房管理系统设计...
  7. 面试官:Redis熟悉吗?谈谈Redis都有哪些性能监控指标
  8. C#保存图片到数据库,读取图片显示
  9. hp服务器系统如何用u盘恢复,软硬件技巧 篇三:HP战66之恢复U盘制作,以及恢复系统之体验感想...
  10. GeoPandas入门 | 03-空间关系和操作
  11. 车辆路径跟踪算法及数学模型
  12. youtube python 中文_GitHub - dousirui001/youtube-streaming-translator-python: 实时翻译油管直播,开发中...
  13. 运放放大倍数计算公式_运放选型速记指南
  14. 小刘同学的 virtuoso IC 618 版图初学
  15. 假华为手机窝点被查!画面不忍直视
  16. Aspack壳代码分析
  17. 华为——IS-IS理论+实验,L1,L2,L1-2彼此之间的邻居关系建立
  18. 更改计算机一级密码,详细教您如何更改win10系统电脑密码
  19. BatchNorm的作用--原理详解
  20. Edwards推出市场上抽吸速度最高的新款紧凑型干式真空泵

热门文章

  1. 嵌入不同源的页面_嵌入式技术课程教与学(教学大纲和试卷)
  2. 利用python进行数据分析——第11章时间序列
  3. 动态规划之子序列问题
  4. 二叉树的遍历 C/C++语言实现
  5. 计算机学术英语常见词汇短语总结
  6. Java 1.1.4 检测字符串是否相等
  7. Python按照索引访问list
  8. CUDA——Windows上CUDA的安装教程
  9. LaTeX中宋体中文无法加粗的情况
  10. TP4056(x) 锂电线性充电电路应用手册