剑指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 }
原文地址:https://www.cnblogs.com/noaman/p/5590639.html