資料結構之二叉樹

2021-10-02 03:15:14 字數 3369 閱讀 6097

(1)陣列儲存方式分析:

優點:通過下標的方式訪問元素,速度快,對於有序陣列,還可以使用二分查詢來提高檢索速度

缺點:如果要檢索某個具體值或者插入值,會整體移動,效率低

(2)鍊錶儲存方式分析

優點:在一定程度上對陣列儲存方式有優化,如插入乙個數值節點,只需要將插入節點,鏈結到鍊錶中即可,刪除效率也很好

缺點:在進行檢索時,效率任然較低.

(3)樹儲存方式分析

能提高資料儲存,讀取的效率,比如利用二叉排序樹(binary sort tree),即可以保證資料的檢索速度,同時也可以保證資料的插入刪除,修改的速度

樹的術語

1)樹有很多種,每個節點最多只能有兩個子節點的一種形式稱為二叉樹

2)二叉樹的子節點分為左節點和右節點

3)如果該二叉樹的所有葉子節點都在最後一層,並且總節點數2^n-1,n是層數,我們稱為滿二叉樹

4)如果還二叉樹的所有葉子節點都在最後一層或者倒數第二層,而且最後一層的葉子節點在左邊連續,倒數第二層的葉子節點在右邊連續,我們稱為完全二叉樹

二叉樹的遍歷:

(1)前序遍歷:先輸出父節點,再遍歷左子樹和右子樹

(2)中序遍歷:先遍歷左子樹,在輸出父節點,再遍歷右子樹

(3)後序遍歷:先遍歷左子樹,在遍歷右子樹,最後輸出父節點

總結:看輸出父節點的順序,就確定是前序,中序,後序

分析二叉樹的遍歷步驟

二叉樹的查詢

思考分析:前序,中序和後序遍歷分別比較了多少次?

二叉樹刪除

暫時我們先定義一下刪除的規則:如果我們刪除的是葉子節點的話,刪除該節點,如果我們刪除的是非葉子節點,那麼刪除該子樹

上面步驟與我接下來**步驟有區別,**先判斷的是6,接下來按照步驟判斷

package com.self.datastructure.binarytree;

public class binarytreedemo

}class binarytree

//前序遍歷

public void preordertree()else

}//中序遍歷

public void infixordertree()else

}//後序遍歷

public void postordertree()else

}//前序遍歷查詢

public heronode preordersearchtree(int no)else

}//中序遍歷查詢

public heronode infixordersearchtree(int no)else

}//後序遍歷查詢

public heronode postordersearchtree(int no)else

}//刪除節點

public void deletebynotree(int no)else

}else

}}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 infixorder()

system.out.println(this);

if(this.right != null)

}//後序遍歷

public void postorder()

if(this.right != null)

system.out.println(this);

}//前序遍歷查詢

public heronode preordersearch(int no)

heronode resultheronode = null;

if(this.left != null)

if(resultheronode != null)

if(this.right != null)

return resultheronode;

}//中序遍歷查詢

public heronode infixordersearch(int no)

if(result != null)

system.out.println("22222222222222222");

if(this.no == no)

if(this.right != null)

return result;

}//後序遍歷查詢

public heronode postordersearch(int no)

if(result != null)

if(this.right != null)

if(result != null)

system.out.println("33333333333333333");

if(this.no == no)

return result;

}//刪除節點

public void deletebyno(int no)

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

if(this.left != null)

if(this.right != null)}}

這裡有個思考:

大家可以一起思考一下,有時間博主會把這塊**實現一下.

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...

資料結構之二叉樹

來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...