码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-16 13:13:23      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

【题目】给定一颗二叉搜索树,请找出其中的第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个节点

标签:

原文地址:http://www.cnblogs.com/noaman/p/5590639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!