typedef struct treenode
int data;
struct treenode *left;
struct treenode *right;
int flag; //該標記用於後序非遞迴遍歷
}ptree;
/**************先序遞迴遍歷*****************/
void bt_preorder(ptree root)
if(root != null)
visit(root); //訪問節點
bt_preorder(root->left);
bt_preorder(root->right);
/**************中序遞迴遍歷*****************/
void bt_midorder(ptree root)
if(root != null)
bt_midorder(root->left);
visit(root); //訪問節點
bt_midorder(root->right);
/**************後序遞迴遍歷*****************/
void bt_beorder(ptree root)
if(root != null)
bt_beorder(root->left);
bt_beorder(root->right);
visit(root); //訪問節點
/**************先序非遞迴遍歷*****************/
void bt_preordernorec(ptree root)
initstack(s);
whlie((root != null) || !s.empty())
if(root != null)
visit(root); //訪問節點
s.push(root);
root = root->left;
else
root = s.pop();
root = root->right;
/**************中序非遞迴遍歷*****************/
void bt_midordernorec(ptree root)
initstack(s);
whlie((root != null) || !s.empty())
if(root != null)
s.push(root);
root = root->left;
else
root = s.pop();
visit(root); //訪問節點
root = root->right;
/**************後序非遞迴遍歷*****************/
/*二叉樹後序遍歷的非遞迴遍歷演算法中,當當前節點存在右子樹的時候需要先遍歷右子樹
因此要對二叉樹的節點定義中新增flag域*/
void bt_beordernorec(ptree root)
initstack(s);
whlie((root != null) || !s.empty())
if(root != null)
s.push(root);
root = root->left;
else
root = s.top(); //top操作只是獲得棧頂的節點,該節點並不出棧
if(root->flag == 1)
visit(root); //訪問節點
s.top();
root = null;
else
root->flag = 1;
root = root->right;
/**************層次遍歷*****************/
void bt_levelorder(ptree root)
initqueue q;
if(root == null)
return;
q.push(root);
while(!q.empty())
root = q.pop();
visit(root); //訪問節點
if(root->left != null)
q.push(root->left);
if(root->right != null)
q.push(root->right);
二叉樹 各種遍歷演算法
include include include using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return 0 輸出 void visi...
二叉樹遍歷的各種演算法
二叉樹的遍歷是指按照一定次序訪問二叉樹中的所有節點,且每個節點僅被訪問一次的過程。是最基本的運算,是其他運算的基礎。二叉樹有兩種儲存結構 順序儲存和鏈式儲存 順序儲存 對完全二叉樹來說,可以充分利用儲存空間,但對於一般的二叉樹,只有少數的儲存單元被利用 cpp view plain copy typ...
演算法之二叉樹各種遍歷
樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...