資料結構與演算法 13 二叉樹

2022-09-19 04:42:12 字數 2306 閱讀 4746

陣列的搜尋比較方便,可以直接用下標,但刪除和插入就比較麻煩;

鍊錶與之相反,刪除和插入元素很快,但查詢比較慢;

此時,二叉樹應運而生,二叉樹既有鍊錶的好處,也有陣列的好處,在處理大批量的動態資料時比較好用,是一種折中的選擇。

檔案系統和資料庫系統一般都是採用樹(特別是b樹)的資料結構資料,主要為排序和檢索的效率。

二叉樹是一種最基本最典型的排序樹,用於教學和研究樹的特性,本身很少在實際中進行應用,因為缺點太明顯,就像氣泡排序一樣,因為效率問題並不實用,但也是我們必須會的。

1、順序儲存可能會浪費空間(在非完全二叉樹的時候),但是讀取某個指定的結點的時候效率比較高o(0);

2、鏈式儲存相對於二叉樹,浪費空間較少,但是讀取某個結點的時候效率偏低o(nlogn)。

二叉樹是一種非常重要的資料結構,非常多的資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹有深度遍歷和廣度遍歷,深度遍歷有前序、中序以及後序三種遍歷方法,廣度遍歷即我們尋常所說的層次遍歷。由於樹的定義本身就是遞迴定義,因此採用遞迴的方法實現樹的三種遍歷。

對於一段**來說,可讀性有時候要比**本身的效率要重要的多。

}//定義binarytree 二叉樹

class binarytree

public void setroot(heronode root)

//前序遍歷

public void preorder() else

}//中序遍歷

public void midorder() else

}//後序遍歷

public void postorder() else

}//刪除結點

public void delnode(int no) else

}else

}}//先建立heronode 結點

class heronode

public int getno()

public void setno(int no)

public string getname()

public void setname(string name)

public heronode getleft()

public void setleft(heronode left)

public heronode getright()

public void setright(heronode right)

@override

public string tostring()

//前序遍歷

public void preorder()

//遞迴向右子樹前序遍歷

if(this.right != null)

}//中序遍歷

public void midorder()

system.out.println(this);//輸出父節點

//遞迴向右子樹前序遍歷

if(this.right != null)

}//後序遍歷

public void postorder()

//遞迴向右子樹前序遍歷

if(this.right != null)

system.out.println(this);//輸出父節點

}//遞迴刪除結點

//1.如果刪除的節點是葉子節點,則刪除該節點

//2.如果刪除的節點是非葉子節點,則刪除該子樹

public void delnode(int no)

//3.如果當前結點的右子結點不為空,並且右子結點 就是要刪除結點,就將this.right= null ;並且就返回(結束遞迴刪除)

if(this.right != null && this.right.no == no)

//4.我們就需要向左子樹進行遞迴刪除

if(this.left != null)

//5.則應當向右子樹進行遞迴刪除

演算法與資料結構 二叉樹

二叉樹 binary tree 二分樹 二元樹 二叉樹的遞迴定義 或是空樹,或是一棵由乙個根結點和左右子樹組成的樹,且左右子樹也是二叉樹。分枝結點 除葉結點以外的結點。二叉樹的性質 最多 2 h 1 個結點 n2 n0 1 滿二叉樹 所有分枝結點都存在左右子樹,且葉結點都在同一層。完全二叉樹 除最後...

資料結構與演算法 二叉樹

1.普通二叉樹 treenode package math public class treenode public void setdata int data public treenode getlchild public void setlchild treenode lchild publi...

資料結構與演算法 二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 性質1 在二叉樹的第i層上至多有2 i 1 個結點 i 0 性質2 深度為k的二叉樹至多有2 k 1個結點 k 0 性質3 對於任意一棵二叉樹,如果其葉結點數為n0,而度...