二叉搜索树的第K大节点

题目:

输入一个颗二叉树搜索树,请找出其中的第K大节点。

解答:

 1 public class Solution {
 2
 3     public TreeNode kthNode(TreeNode root, int k) {
 4         if(root == null || k == 0) {
 5             return null;
 6         }
 7
 8         return kthNodeCore(root, k);
 9     }
10
11     private static TreeNode kthNodeCore(TreeNode root, int k) {
12         TreeNode target = null;
13         if(root.left != null) {
14             target = kthNodeCore(root.left, k);
15         }
16
17         if(target == null) {
18             if(k == 1) {
19                 target = root;
20             }
21
22             k--;
23         }
24
25         if(target == null && root.right != null) {
26             target = kthNodeCore(root.right, k);
27         }
28
29         return target;
30     }
31 }

原文地址:https://www.cnblogs.com/wylwyl/p/10475252.html

时间: 2024-09-29 17:01:07

二叉搜索树的第K大节点的相关文章

【剑指offer】【树】54.二叉搜索树的第k大节点

二叉搜索树的第k大节点 递归法 中序遍历的二叉搜索树序列为单调递增的序列,将中序遍历的结果放到vector中,第k大的数为v.size()-k位置的数 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ cl

剑指offer之【二叉搜索树的第k个节点】

题目: 二叉搜索树的第k个结点 链接: https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&tqId=11215&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=4 题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \

二叉搜索树的第k大的节点

题目 给定一颗二叉搜索树,请找出其中的第k大的结点. 思路 如果中序遍历一棵二叉搜索树,遍历序列的数值则是递增排序,因此只需中序遍历一个二叉搜索树即可. #include <iostream> using namespace std; struct tree { double data; struct tree *left,*right; tree(int d=0):data(d) { left=right=nullptr; } }; class Solution { public: void

二叉搜索树的第k个节点

题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路:中序遍历 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 cla

剑指offer(62)二叉搜索树的第K个节点

题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 题目分析 首先,我们可以先画图.画完图后我们要想办法从中找出第K小的节点. 因为这是二叉搜索树,我们可以轻易发现它的中序遍历序列就是从小到大排列,也就是我们可以直接中序遍历,同时计数,就可以得到我们想要的节点了. 不过需要注意的是我们的计数变量k应该在函数外面,不然递归进去后回来时是无法获得已经改变了的k值的. 代码 function KthNode(

62.二叉搜索树的第k个节点(python)

题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 思路:中序遍历 1 class Solution: 2 # 返回对应节点TreeNode 3 def KthNode(self, pRoot, k): 4 # write code here 5 stack = [] 6 while stack or pRoot: 7 if pRoot: 8 stack.append(pRoot) 9 pRoot =

面试题:二叉搜索树的第K个节点

题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 思路1:非递归中序遍历 import java.util.Stack; public class Solution { TreeNode KthNode(TreeNode root, int k){ if(root==null||k==0) return null; int count=0; Stack<TreeNode> stack=new Sta

[LeetCode] Lowest Common Ancestor of a Binary Search Tree 二叉搜索树的最小共同父节点

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has

二叉搜索树的第k个结点-剑指Offer

二叉搜索树的第k个结点 题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如,5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路 对于二叉搜索树,中序遍历的结果是按照顺序来的,我们设置一个变量用来计数,递归的遍历树,如果到了第k个,则把那个数取出来,我在这用的是ArrayList来存储那个结点 还可以在递归方法中直接返回结点,无需用ArrayList跟踪存储,更加简化 代码 import java.util.ArrayList; /* pub