java資料結構(四) 棧

2021-07-13 23:26:58 字數 2445 閱讀 8082

樹結構是一種描述非線性關係的資料結構。對於樹的基本概念不想過多贅述,可以自行查閱相關資料,這裡主要講解一種簡單的樹結構——二叉樹。二叉樹是樹的一種特殊形式,它有n個結點,每個結點最多有兩個子結點。二叉樹的子樹仍然是二叉樹,二叉樹的兩個子樹分別是左子樹和右子樹,因此二叉樹也是有序樹。二叉樹又分為:完全二叉樹和滿二叉樹,概念不再詳述,自行查詢。

完全二叉樹的性質:

1、如果m!=1,則結點m的父節點為m/2;

2、如果2*m<=n,則m的左子樹編號為2*m;若2*m>n則無左子樹,也無右子樹。

3、如果2*m+1<=n,則m的右子樹編號為2*m+1;若2*m+1>n則無右子樹。

完全二叉樹的深度為[log2n]+1。

二叉樹的儲存方式:1、順序儲存 2、鏈式儲存。

順序儲存即按層將二叉樹儲存到乙個陣列中,這裡不再詳述,重點講鏈式儲存。

二叉樹的鏈式儲存:

1、資料部分

class cbttype               //定義二叉樹結點型別 

2、初始化二叉樹

cbttype inittree()                          //初始化二叉樹的根 

else

}return

null;

}

3、新增結點

void addtreenode(cbttype treenode)          //新增結點

system.out.printf("1.新增該結點到左子樹\n2.新增該結點到右子樹\n");

doelse

else

break;

case

2: //新增到右結點

if( parent.right!=null) //右子樹不為空

else

break;

default:

system.out.printf("無效引數!\n");}}

}}while(menusel!=1 && menusel!=2);

}}

4、查詢結點

cbttype treefindnode(cbttype treenode,string

data) //查詢結點

else

else

//查詢左右子樹

else

if((ptr=treefindnode(treenode.left,data))!=

null)

else}}

}

5、獲取左/右子樹

cbttype treeleftnode(cbttype treenode)  //獲取左子樹

else

}cbttype treerightnode(cbttype treenode) //獲取右子樹

else

}

6、判斷樹是否為空 計算二叉樹深度

int treeisempty(cbttype treenode)           //判斷空樹

else

}int treedepth(cbttype treenode) //計算二叉樹深度

else

else

} }

7、清空二叉樹 顯示結點資料

void cleartree(cbttype treenode)        // 清空二叉樹

}void treenodedata(cbttype p) //顯示結點資料

8、二叉樹遍歷演算法

(1)按層遍歷演算法

void leveltree(cbttype treenode)    //按層遍歷 

while(head!=tail) //佇列不為空,進行迴圈

if(p.right!=null) //如果結點存在右子樹

}}

(2)先序遍歷

void dlrtree(cbttype treenode)

//先序遍歷

}

(3)中序遍歷

void ldrtree(cbttype treenode)

//中序遍歷

}

(4)後序遍歷

void lrdtree(cbttype treenode)

//後序遍歷

}

到此為止,樹的基本資料結構就到此結束了!

資料結構 (四)棧

總體來說,棧的知識比線性表 順序表簡單很多。但是同時也有許多需要注意的點,稍稍不注意就可能會出現錯誤,因此,雖然簡單一點,但也要細心學習。一 基本知識 棧 限定僅在表尾進行插入和刪除操作的線性表。允許插入和刪除的一端稱為棧頂,另一端稱為棧底。空棧 不含任何資料元素的棧。棧的操作特性 後進先出 注意 ...

資料結構 四 棧

棧是限定僅在表尾進行插入和刪除的線性表 typedef struct sqstack 棧的順序基本操作 1 進棧操作 status push sqstack s,selemtype e s top s data s rop e return ok 2 出棧操作 status pop sqstack ...

資料結構之棧(四)

本文將繼續擴充套件stack在arithmetical expression的處理方面的應用,其中包括 postfix2prefix postfix2infix 和 infix2postfix 一 postfix2prefix 它是通過多次入棧和出棧來完成的。主要步驟是 遍歷 postfix str...