二叉樹(二叉鍊錶實現)

2021-08-26 00:27:16 字數 3112 閱讀 6608

二叉鍊錶結構的二叉樹模型,棧用自己寫的模版,佇列就不了 ,直接用stl的,不然**太長了

檔案"tree.h"

#include#include#includeusing namespace std; templateclass my_stack; templateclass node //結點類 node(t d) friend my_stack; }; templateclass my_stack bool empty() const void push(t d) //入棧 t top() //返回棧頂元素 void pop() //彈出棧頂元素 }; class bintree; class binnode ; class bintree binnode *get_root() binnode *create_tree(binnode *r) //先序建立二叉樹 root=r; return r; } bool _empty() int tree_depth(binnode *p) //求二叉樹深度 void preorder_rec(binnode *p) //先序遍歷 } void inorder_rec(binnode *p) //中序遍歷 } void postorder_rec(binnode *p) //後序遍歷 } void levelorder_rec(binnode *p) //按層次遍歷 }while(p); } binnode *copy(binnode *p) //複製二叉樹 void exchange(binnode *p,my_stacks) //交換左右子樹 if(t->lchild) exchange(t->lchild,s); if(t->rchild) exchange(t->rchild,s); }while(!s.empty()); } } int leaf_rec(binnode *p) //計算葉子結點數 } int is_completebintree(binnode *p) //判斷是不是完全二叉樹 if(p->rchild && !flag) q.push(p->rchild); else } return 1; } void ancestor(binnode *p,int d) //求祖先 if(t && t->data==d) return ; } else if(temp->tag!=1) }//end_else(t==null) }//end_while }//end_else(t!=0 && t->data!=d) }//end void counter(binnode *r) //求每一層中,資料值大於某個值的總數,且分層輸出 if(r->rchild) if(num[level]) if(r->lchild) if(r->rchild) } cout<0;j--) cout

#include"tree.h" #includeint main()

輸出結果呢 是這樣的,裡面加上了測試時間的一小段**

二叉樹為空 輸入資料(0代表空):5 輸入資料(0代表空):3 輸入資料(0代表空):2 輸入資料(0代表空):1 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):4 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):8 輸入資料(0代表空):6 輸入資料(0代表空):0 輸入資料(0代表空):7 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):9 輸入資料(0代表空):0 輸入資料(0代表空):0 二叉樹不空 先序遍歷二叉樹:5 3 2 1 4 8 6 7 9 中序遍歷二叉樹:1 2 3 4 5 6 7 8 9 後序遍歷二叉樹:1 2 4 3 7 6 9 8 5 按層次遍歷二叉樹:5 3 8 2 4 6 9 1 7 這段**執行時間為:20ms 二叉樹的深度為:4 _____複製二叉樹_______ _____複製完成_____ 複製後的樹的先序遍歷為:5 3 2 1 4 8 6 7 9 ____交換二叉樹左右子樹____ ____交換完成____ 交換後先序遍歷為:5 8 9 6 7 3 4 2 1 二叉樹的葉子結點數目為:4 結點值為1的祖先為: 2 3 5 不是完全二叉樹 將幫你比如統計每一層中不小於特定數字的結點總數並輸出對應結點的值 輸入你要作為比較標誌的數字:3 第1層中不小於3的結點總數為:1個 具體是:5 第2層中不小於3的結點總數為:2個 具體是:8 3 第3層中不小於3的結點總數為:3個 具體是:9 6 4 第4層中不小於3的結點總數為:1個 具體是:7 輸出二叉樹中所有從根節點出發到葉子結點的路徑: 5->3->2->1 5->3->4 5->8->6->7 5->8->9 press any key to continue

今天發現的乙個好東西 可以用system("pause"); 來加在你想要暫停的**後面,就比如 我上面的程式中 我把這句話 加在 求祖先的那個函式裡面 ,具體加在**看下面** 加大號那裡,加了那句以後是什麼效果呢 ,看下面的執行結果

void ancestor(binnode *p,int d) if(t && t->data==d) return ; } else if(temp->tag!=1) }//end_else(t==null) }//end_while }//end_else(t!=0 && t->data!=d) }//end

二叉樹為空 輸入資料(0代表空):5 輸入資料(0代表空):3 輸入資料(0代表空):2 輸入資料(0代表空):1 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):4 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):8 輸入資料(0代表空):6 輸入資料(0代表空):0 輸入資料(0代表空):7 輸入資料(0代表空):0 輸入資料(0代表空):0 輸入資料(0代表空):9 輸入資料(0代表空):0 輸入資料(0代表空):0 二叉樹不空 先序遍歷二叉樹:5 3 2 1 4 8 6 7 9 中序遍歷二叉樹:1 2 3 4 5 6 7 8 9 後序遍歷二叉樹:1 2 4 3 7 6 9 8 5 二叉樹的深度為:4 _____複製二叉樹_______ _____複製完成_____ 複製後的樹的先序遍歷為:5 3 2 1 4 8 6 7 9 ____交換二叉樹左右子樹____ ____交換完成____ 交換後先序遍歷為:5 8 9 6 7 3 4 2 1 二叉樹的葉子結點數目為:4 結點值為1的祖先為: 2 請按任意鍵繼續. . . 3 請按任意鍵繼續. . . 5 請按任意鍵繼續. . . press any key to continue

下面多了 那個按任意鍵繼續的提示 ,就是暫停了在那裡後,可以繼續開始的提示 這個用來找錯誤還是不錯的 特別是迴圈很多的時候,指標很多的時候

二叉鍊錶實現二叉樹

二叉樹的遍歷 前序遍歷,中序遍歷,後序遍歷,層序遍歷 二叉鍊錶的儲存實現 1 定義結構體,儲存二叉樹的結點資料,該結點的左兒子,右兒子。2 每乙個函式都要有乙個對應的私有成員 includeusing namespace std templatestruct binode templateclass...

二叉樹 二叉鍊錶

include using namespace std typedef char elemtype int n 0 typedef struct binode binode class bitree bitree binode getroot void preorder binode root 前序...

二叉鍊錶儲存二叉樹

鏈式儲存結構 二叉樹的鏈式儲存結構是指,用鍊錶來表示一棵二叉樹,即用鏈來指示元素的邏輯關係。其中,data域存放某結點的資料資訊 lchild與rchild分別存放指向左孩子和右孩子的指標,當左孩子或右孩子不存在時,相應指標域值為空 用符號 或null表示 利用這樣的結點結構表示的二叉樹的鏈式儲存結...