二叉樹的標頭檔案…不包含裡面所用的棧和佇列的標頭檔案
在非遞迴裡面會用到,非遞迴只闡述思想,不寫**,遞迴**如下:
#ifndef _btree_h_
#define _btree_h_
typedef char btdatatype;
typedef struct binarytreenode
btnode;
// 通過前序遍歷的陣列"abd##e#h##cf##g##"構建二叉樹
btnode* binarytreecreate(btdatatype* a);//建立二叉樹
void binarytreedestory(btnode** root);
int binarytreesize(btnode* root);//元素的個數
int binarytreeleafsize(btnode* root);//葉子數
int binarytreelevelksize(btnode* root, int k);//第幾層有幾個元素 遞迴的寫法
btnode* binarytreefind(btnode* root, btdatatype x);
// 遍歷
void binarytreeprevorder(btnode* root);
void binarytreeinorder(btnode* root);
void binarytreepostorder(btnode* root);
// 非遞迴遍歷
// 層序遍歷
void binarytreelevelorder(btnode* root);
// 判斷二叉樹是否是完全二叉樹
int binarytreecomplete(btnode* root);
void binarytreeprevordernonr(btnode* root);
void binarytreeinordernonr(btnode* root);
void binarytreepostordernonr(btnode* root);
void testbinarytree();
#endif//_btree_h_
1.前序遞迴演算法
tnode* binarytreecreate(btdatatype* src)//二叉樹的建立
btnode *cur = (btnode *)malloc(sizeof(btnode));
cur->_data = src[s_n];
s_n++;
cur->lchild = binarytreecreate(src);
cur->rchild = binarytreecreate(src);
return cur;
}void binarytreeprevorder(btnode* root)//二叉樹的前序遍歷
}
2.中序遞迴演算法
void binarytreeinorder(btnode* root)//二叉樹的中序遍歷
}
3.後序遞迴演算法
void binarytreepostorder(btnode* root)//二叉樹的後序遍歷
}
4.層序遞迴演算法
void binarytreelevelorder(btnode* root)//層序遍歷
5.前序非遞迴遍歷演算法
void binarytreeprevordernonr(btnode* root)//前序非遞迴遍歷
6.中序非遞迴演算法
void binarytreeinordernonr(btnode* root)//中序非遞迴遍歷
7.後序非遞迴演算法
void binarytreepostordernonr(btnode* root)//後序非遞迴遍歷
while(!stackisempty(&st) && tag[st.size-1])迴圈列印出棧
前面的條件只在迴圈結束的時候生效
後面的條件分兩種情況
1.當此次cur為空時,for不進,此條件成立,
2.當cur不為空,for進,此條件不成立
if(!stackisempty(&st))此條件只在最後一次迴圈跳出的時候生效
}while(!stackisempty(&st));
*/}
二叉樹的三種非遞迴遍歷
一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...
二叉樹的三種非遞迴遍歷
遞迴演算法和非遞迴演算法的轉換 可以借助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃瞄 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰乙個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃瞄該結點的有孩子結點,將其...
二叉樹的三種非遞迴遍歷
struct treenode 一 前序輸出二叉樹 void preorder treenode root p stk.top stk.pop p p right 二 中序輸出二叉樹 void midorder treenode root p stk.top cout void postorder ...