java輔導(dǎo):在JAVA中實(shí)現(xiàn)的二叉樹(shù)結(jié)構(gòu)

字號(hào):

在JAVA中實(shí)現(xiàn)二叉樹(shù)結(jié)構(gòu)
    *
    * 講解:
    * 二個(gè)方法函數(shù),一個(gè)尋找關(guān)鍵字--searchkey 另一個(gè)是插入一個(gè)結(jié)點(diǎn):insertTree
    * 另外這是一個(gè)完全的先序遍歷二叉樹(shù)的語(yǔ)法。先根結(jié)點(diǎn),再左結(jié)點(diǎn),如無(wú)再右結(jié)點(diǎn),
    * 如此遞歸至搜索完畢。
    *
    */
    public class BinaryTreeTest {
    private BinaryTree root = null;
    public BinaryTreeTest() {
    init();
    }
    /**
    * 初始化給定數(shù)據(jù)的二叉樹(shù)結(jié)構(gòu)
    *
    */
    private void init() {
    int data[] = { 12, 11, 34, 45, 67, 38, 56, 43, 22, 8 };
    root = new BinaryTree(data[0]);
    System.out.println("二叉樹(shù)的中的數(shù)據(jù)結(jié)構(gòu):");
    System.out.println("------------------------------------");
    System.out.println(data[0] + ":root");
    for (int i = 1; i < data.length; i++) {
    System.out.print(data[i] + ":");
    root.insertTree(root, data[i]);
    }
    System.out.println("------------------------------------");
    }
    public void serach(int key) {
    if (searchkey(root, key)) {
    System.out.println("找到了:" + key);
    } else {
    System.out.println("沒(méi)有找到:" + key);
    }
    }
    private boolean searchkey(BinaryTree root, int key) {
    if (root == null) {
    return false;
    } else if (root.data == key) {
    return true;
    } else if (key >= root.data) {
    return searchkey(root.rightpoiter, key);
    }
    return searchkey(root.leftpoiter, key);
    }
    class BinaryTree {
    int data;
    BinaryTree leftpoiter;
    BinaryTree rightpoiter;
    BinaryTree(int data) {
    this.data = data;
    leftpoiter = null;
    rightpoiter = null;
    }private void insertTree(BinaryTree root, int data) {
    if (data >= root.data) {
    if (root.rightpoiter == null) {
    System.out.println(" -> new rightpoiter");
    root.rightpoiter = new BinaryTree(data);
    } else {
    System.out.print(" -> rightpoiter");
    insertTree(root.rightpoiter, data);
    }
    } else {
    if (root.leftpoiter == null) {
    System.out.println(" -> new leftpoiter");
    root.leftpoiter = new BinaryTree(data);
    } else {
    System.out.print(" -> leftpoiter");
    insertTree(root.leftpoiter, data);
    }
    }
    }
    }
    public static void main(String args[]) {
    BinaryTreeTest b = new BinaryTreeTest();
    int key = 8; //key:任意數(shù)值
    b.serach(key); //到二叉樹(shù)中查找
    }
    }
    運(yùn)行結(jié)果:
    C:java>java BinaryTreeTest
    二叉樹(shù)的中的數(shù)據(jù)結(jié)構(gòu):
    ------------------------------------
    12:root
    11: -> new leftpoiter
    34: -> new rightpoiter
    45: -> rightpoiter -> new rightpoiter
    67: -> rightpoiter -> rightpoiter -> new rightpoiter
    38: -> rightpoiter -> rightpoiter -> new leftpoiter
    56: -> rightpoiter -> rightpoiter -> rightpoiter -> new leftpoiter
    43: -> rightpoiter -> rightpoiter -> leftpoiter -> new rightpoiter
    22: -> rightpoiter -> new leftpoiter
    8: -> leftpoiter -> new leftpoiter
    ------------------------------------
    找到了:8