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 = pRoot.left
10             else:
11                 pRoot=stack.pop()
12                 k-=1
13                 if k == 0:
14                     return pRoot
15                 pRoot=pRoot.right

2019-12-31 21:26:57

原文地址:https://www.cnblogs.com/NPC-assange/p/12127549.html

时间: 2024-10-31 07:27:24

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

剑指offer 62.二叉搜索树的第k个结点

剑指offer 62.二叉搜索树的第k个结点 题目 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 思路 二叉搜索树的中序遍历是递增的,找到第k小的话,那就只需要中序遍历即可,遍历的第k个数就是所需的数. 代码 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int v

剑指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 / \

【剑指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

62二叉搜索树的第k个结点

题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 思路 二叉搜索树的中序遍历的输出结果是拍好序的,直接输出第K个即可 1 public class Solution { 2 int time = 0; 3 TreeNode KthNode(TreeNode root, int k){ 4 if(root==null) return null; 5 TreeNode node = KthNod

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

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

二叉搜索树的第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

面试题:二叉搜索树的第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

二叉搜索树的第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 r

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

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