劍指offer第二版-54.二叉搜索樹的第k大節點

本系列導航:劍指offer(第二版)java實現導航帖

面試題54:二叉搜索樹的第k大節點

題目要求:
找出二叉搜索樹的第k大節點。例如,在下圖的樹里,第3大節點的值為4,輸入該樹的根節點,3,則輸出4。

        5
       / \
      3   7
    / \   / \
   2  4  6   8

解題思路:
二叉搜索樹的中序遍歷是有序的。可以引入一個計數器,每訪問一個節點,計數器+1,當計數器等于k時,被訪問節點就是該二叉搜索樹的第k大節點。

package chapter6;
import structure.TreeNode;
import java.util.Stack;

/**
 * Created with IntelliJ IDEA
 * Author: ryder
 * Date  : 2017/8/15
 * Time  : 19:17
 * Description:二叉搜索樹的第k大節點
 **/
public class P269_KthNodeInBST {
    public static TreeNode<Integer> kthNode(TreeNode<Integer> root,int k){
        //棧頂元素保證一直是cur的父節點
        if(root==null || k<0)
            return null;
        Stack<TreeNode<Integer>> stack = new Stack<>();
        TreeNode<Integer> cur = root;
        int count = 0;
        while (!stack.isEmpty()||cur!=null){
            if(cur!=null){
                stack.push(cur);
                cur = cur.left;
            }
            else{
                cur = stack.pop();
                count++;
                if(count==k)
                    return cur;
                cur = cur.right;
            }
        }
        return null;
    }
    public static void main(String[] args){
        TreeNode<Integer> root = new TreeNode<>(5);
        root.left = new TreeNode<>(3);
        root.left.left = new TreeNode<>(2);
        root.left.right = new TreeNode<>(4);
        root.right = new TreeNode<>(7);
        root.right.left = new TreeNode<>(6);
        root.right.right = new TreeNode<>(8);
        System.out.println(kthNode(root,3).val);//4
        System.out.println(kthNode(root,6).val);//7
        System.out.println(kthNode(root,8));//null
    }
}

運行結果

4
7
null
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • 面試題7:重建二叉樹 題目: 輸入某二叉樹的前序遍歷和中序遍歷的結果。請重建該二叉樹。假設輸入的前序遍歷和中序遍歷...
    lyoungzzz閱讀 575評論 0 0
  • 基于樹實現的數據結構,具有兩個核心特征: 邏輯結構:數據元素之間具有層次關系; 數據運算:操作方法具有Log級的平...
    yhthu閱讀 4,320評論 1 5
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,159評論 0 12
  • 1 概述 二叉搜索樹,顧名思義,其主要目的用于搜索,它是二叉樹結構中最基本的一種數據結構,是后續理解B樹、B+樹、...
    CodingTech閱讀 3,141評論 5 35