剑指offer系列36----二叉搜索树的第k个节点

Posted noaman_wgs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列36----二叉搜索树的第k个节点相关的知识,希望对你有一定的参考价值。

【题目】给定一颗二叉搜索树,请找出其中的第k大的结点。
* 例如, 5
* / \
* 3 7
* / \ / \
* 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 中序遍历:2 3 4 5 6 7 8

 1 package com.exe7.offer;
 2 
 3 import java.util.Stack;
 4 
 5 /**
 6  * 【题目】给定一颗二叉搜索树,请找出其中的第k大的结点。
 7  *            例如, 5 
 8  *            / \ 
 9  *           3   7 
10  *          / \ / \ 
11  *          2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。 中序遍历:2 3 4 5 6 7 8
12  * @author WGS
13  *
14  */
15 public class BiTreeKthNode {
16     static class TreeNode{
17         int val;
18         TreeNode left=null;
19         TreeNode right=null;
20         public TreeNode(int val){
21             this.val=val;
22         }
23     }
24     
25     public TreeNode getKthNode(TreeNode pRoot,int k){
26         if(pRoot==null ) return pRoot;
27         TreeNode curNode=pRoot;
28         Stack<TreeNode> stack=new Stack<>();
29         int p=0;
30         
31         while(curNode!=null || !stack.isEmpty()){
32             while(curNode!=null){
33                 stack.push(curNode);
34                 curNode=curNode.left;
35             }
36             if(!stack.isEmpty()){
37                 curNode=stack.pop();
38                 p++;
39                 if(p==k) return curNode;
40                 curNode=curNode.right;
41             }
42         }
43         return null;        
44     }
45 
46     public static void main(String[] args) {
47         
48         BiTreeKthNode b=new BiTreeKthNode();
49         TreeNode root=new TreeNode(5);
50         TreeNode node1=new TreeNode(3);
51         TreeNode node2=new TreeNode(7);
52         TreeNode node3=new TreeNode(2);
53         TreeNode node4=new TreeNode(4);
54         TreeNode node5=new TreeNode(6);
55         TreeNode node6=new TreeNode(8);
56         root.left=node1;
57         root.right=node2;
58         node1.left=node3;
59         node1.right=node4;
60         node2.left=node5;
61         node2.right=node6;
62         
63         TreeNode node=b.getKthNode(root, 2);
64         System.out.println(node.val);
65     }
66 
67 }

 

以上是关于剑指offer系列36----二叉搜索树的第k个节点的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 54. 二叉搜索树的第k大节点

每日一题 - 剑指 Offer 54. 二叉搜索树的第k大节点

[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点

剑指 Offer 54. 二叉搜索树的第k大节点-中序遍历

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

精选力扣500题 第62题 剑指 Offer 54. 二叉搜索树的第k大节点c++/java详细题解