说明:java
该题牛客和力扣有点区别,下面分别来进行解决。web
题目描述svg
(1)力扣:this
给定一棵二叉搜索树,请找出其中第k大的节点。spa
注意:这里是求第k大结点,并且题目给的返回值为int,是个数值。code
思路分析:xml
求二插搜索树的第k大结点,则用右根左的方式遍历二叉树序列,结果为递减序列,找到其中的第k个元素便可。token
参考代码:it
class Solution { private int res;//定义成员变量 private int k;//定义成员变量 public int kthLargest(TreeNode root, int k) { if(root == null || k < 0)return -1; this.k = k;//赋值 dfs(root); return res;//这里返回的是第k大结点的 结点值 } public void dfs(TreeNode root){ if(root == null)return; if(k == 0) return; //右 dfs(root.right); //根 if(--k == 0)res = root.val;//别忘了-- //左 dfs(root.left); } }
(2)牛客:io
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
注意:这里是求第k小结点,并且题目给的返回值为TreeNode,是个结点。
思路分析:
求二插搜索树的第k小结点,则用左根右的方式遍历二叉树序列,结果为递增序列,找到其中的第k个元素便可。
参考代码:
class Solution { private TreeNode res;//定义成员变量,注意这里成告终点类型 private int k;//定义成员变量 TreeNode KthNode(TreeNode root, int k){ if(root == null || k < 0)return null; this.k = k;//赋值 dfs(root); return res;//这里返回的是 第k小的结点 } public void dfs(TreeNode root){ if(root == null)return; if(k == 0) return; //左 dfs(root.left); //根 if(--k == 0)res = root;//别忘了-- //右 dfs(root.right); } }
(完)