zoukankan      html  css  js  c++  java
  • 剑指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 }
  • 相关阅读:
    Typescript和React结合项目初始化
    React 和 TypeScript 如何一起使用
    Cesium取代leaflet,和Vue等前端框架结合
    cesium之3dtiles的制作问题
    Cesium-3dTiles格式详解
    TIN和等高线的关系
    CAD如何生成等高线
    Cesium风场
    cesium加载等高线
    DEM坡度和坡向分析
  • 原文地址:https://www.cnblogs.com/noaman/p/5590639.html
Copyright © 2011-2022 走看看