ノードk番目の最大のバイナリ検索ツリー:54の顔の質問

トピック:

二分探索木を考えると、k番目の最大のノードを見つけてください。

分析:

トラバーサルの結果INORDERバイナリ検索ツリーは配列が小から大まで順序付けされ、K-探し大ノードが降順に配列に注文することができる、使用の順序が宇根残され再帰的なトラバースは、カウンタを使用しながら、カウンタがKに達する時間は、kが大きいノードです。

ソリューション:

package com.wsy;

class Tree {
    private int value;
    private Tree left;
    private Tree right;

    public Tree() {
    }

    public Tree(int value) {
        this.value = value;
        this.left = this.right = null;
    }

    public Tree(int value, Tree left, Tree right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public Tree getLeft() {
        return left;
    }

    public void setLeft(Tree left) {
        this.left = left;
    }

    public Tree getRight() {
        return right;
    }

    public void setRight(Tree right) {
        this.right = right;
    }
}

public class Main {
    public static int count;

    public static void main(String[] args) {
        Tree tree = init();
        int k = 3;
        getKth(tree, k);
    }

    public static Tree init() {
        Tree tree8 = new Tree(8);
        Tree tree6 = new Tree(6);
        Tree tree4 = new Tree(4);
        Tree tree2 = new Tree(2);
        Tree tree7 = new Tree(7, tree6, tree8);
        Tree tree3 = new Tree(3, tree2, tree4);
        Tree tree5 = new Tree(5, tree3, tree7);
        return tree5;
    }

    public static void getKth(Tree tree, int k) {
        if (tree == null || k < 1) {
            return;
        }
        if (tree.getRight() != null) {
            getKth(tree.getRight(), k);
        }
        count++;
        if (count == k) {
            System.out.println("第" + k + "大的结点是:" + tree.getValue());
        }
        if (tree.getLeft() != null) {
            getKth(tree.getLeft(), k);
        }
    }
}

 

公開された181元の記事 ウォンの賞賛1 ビュー7419

おすすめ

転載: blog.csdn.net/qq_36059561/article/details/104390260
おすすめ