1. 程式人生 > >二叉排序樹的建立和遍歷(java)

二叉排序樹的建立和遍歷(java)

也是個經典的面試題,要求建立二叉排序樹同時實現樹的遍歷,其實不難,直接上程式碼吧

樹節點定義:

class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(){

    }

    TreeNode(int value){
        this.val = value;
        this.left = null;
        this.right = null;
    }

    TreeNode(int value, TreeNode left, TreeNode right){
        this
.val = value; this.left = left; this.right = right; } }

建立二叉排序樹

public static TreeNode buildBST(int[] data){
        //建立二叉排序樹
        //假設data中的數字是互不相同的
        TreeNode root = new TreeNode(data[0]);
        for(int i = 1; i < data.length; i++){
            insert(root, data[i]);
        }

        return
root; } private static TreeNode insert(TreeNode root, int value) { //二叉排序樹插入節點 if(root == null){ root = new TreeNode(value); }else{ if(value <= root.val){ //插入到左子樹 root.left = insert(root.left, value); }else
{ //插入到右子樹 root.right = insert(root.right, value); } } return root; }

遍歷驗證下:
更多的樹的遍歷方法,參考二叉樹的多種遍歷方法

public static void preOrder(TreeNode root){
        if(root == null){
            return;
        }
        System.out.print(root.val + " ");
        if(root.left != null){
            preOrder(root.left);
        }
        if(root.right != null){
            preOrder(root.right);
        }
    }

main函式:

public static void main(String[] args) {
        int[] data = {3,1,2,5,0,7,9,8};
        TreeNode root = Main.buildBST(data);
        Main.preOrder(root);
    }

當然這樣生成的二叉樹不是高度最小的二叉樹,不過對於面試到這基本也就可以了

相關推薦

排序建立(java)

也是個經典的面試題,要求建立二叉排序樹同時實現樹的遍歷,其實不難,直接上程式碼吧 樹節點定義: class TreeNode{ int val; TreeNode left;

建立

mil inorder 推斷 microsoft con 是否 font pac node 二叉樹創建遍歷規則: 1.先序:根-左-右 2.中序:左-根-右 3.後序:左-右-根 二叉樹定義和輔助函數例如以下: struct node {

遞迴建立及深度計算

上篇咱們說到二叉樹的一種建立方法及三種遍歷方法的遞迴非遞迴演算法。這篇換了一種新的建立方法,用先根遍歷遞迴的思路建立二叉樹,用遞迴的方法計算深度,用中根遞迴和非遞迴方法遍歷整個二叉樹。 BinaryTree.h //二叉樹的建立和遍歷 #ifndef BINARYTREE_

程式設計基礎79 給定排序結構陣列求整棵

1099 Build A Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: T

搜尋的構建,,查詢,刪除

轉載請註明出處: 百度面試很喜歡問樹,直接被虐慘。有必要對資料結構中的各種樹進行仔細的研究。本篇部落格重點研究二叉搜尋樹。 資料結構中為了儲存和查詢的方便,用各種樹結構來儲存資料,下面就淺談一下各種樹的表示方法、特點及各自的用途,涉及的樹結構包括:二

搜尋的後續序列

題目 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。 程式碼 public boolean VerifySquenceOfBST(int [] sequence) {

排序建立(JAVA實現)

      最近看了一下二叉排序樹的建立,自己寫了一段程式碼,用來建立二叉排序樹,給定一個數組,對這個陣列中的數字進行建立二叉排序樹。分兩種情況:      1  陣列中的數字是隨機的,也就是說沒有順序 eg : int  a [ ] = {3,1,2,5,0,7,9,8}

劍指Offer-Python-搜尋的後續序列

題目:二叉搜尋樹的後續遍歷序列 輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。 思路:二叉搜尋樹的特點是,左子樹的值小於根節點的值,右子樹的值大於根節點的值。

搜尋層序C語言

  層序遍歷,寫完了,感慨下.   不同於前序遍歷,中序遍歷,後序遍歷,層序遍歷沒有使用棧模式,而是使用了佇列.   佇列中的資料,即QueueItem是二叉搜尋樹結點指標,這樣可以儲存結點,並且可以方便處理棧為空時返回值的問題.也就是可以返回NULL.   用一個函式實現,

排序建立

   輸入一系列整數,建立二叉排序樹,並進行前序、中序、後序遍歷。 #include <iostream> using namespace std; #include <stdio.h> #include <stdlib.h> typ

排序建立各種方法-java

轉載自:https://www.2cto.com/kf/201608/534396.html二叉排序樹的定義:二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;(2)若右子樹不空,則右子樹上所有結點的值均大於

JAVA實現排序建立、中序、插入節點刪除節點操作)

JAVA實現二叉排序樹 二叉排序樹的定義 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值; (3)左、

建立

指示 post 完成 結構 namespace eno else cout treenode 二叉樹是十分重要的數據結構,主要用來存放數據,並且方便查找等操作,在很多地方有廣泛的應用。 今天主要寫的最基本的二叉樹,後續會繼續寫線索二叉樹,二叉排序樹,平衡二叉樹等。 二叉樹的

的常見建立

#include <stdio.h> #include <stdlib.h>> const int MAX=20; typedef struct Node { char data; struct Node*lchild; struct Node*rchild

建立(遞迴建樹&層序建樹)

#include<stdio.h>#include <cstdlib>#include <iostream>#include <stack>#include<queue>using namespace std; //二叉樹定義typedef cha

建立(遞歸建樹&層序建樹)

str use namespace lib empty tof troy 輸入 turn #include<stdio.h>#include <cstdlib>#include <iostream>#include <stack&g

【資料結構】建立(非遞迴)

該程式使用的是遞迴地建立方法,以及非遞迴的遍歷演算法 執行環境:Dev-C++ #include <stdio.h> #include <stdlib.h> typedef struct node{ char data; struct node *lchild

按層次順序建立

第一篇部落格,獻給了資料結構--二叉樹。 最近在學資料結構,總結一下二叉樹的按層次建立的方法,希望對此時的你有所幫助~ 有錯誤的地方,還望大神指出,或者有其他更好的方法,歡迎留言~ /*利用順序佇列,層次建立二叉樹*/ #include <iostream> using name

排序建立,查詢,

1 #include<stdio.h> 2 #include <iostream> 3 #include<algorithm> 4 using namespace std; 5 #define MAXSIZE 100 6 typedef int KeyTy

線索的原理以及建立(c++)

這是一篇非常好的關於線索二叉樹的文章,內容詳細到位,敘述清晰。作者應該是很認真、細心的人,估計花了不少時間和精力,向作者致敬! 一、線索二叉樹概念 具有 n 個結點的二叉連結串列中,其二叉連結串列的 n 個結點中共有 2n 個指標域,在這 2n 個指標域中,真正