#include
#include
#include
using
namespace
std;
//二叉樹結點
typedef
struct bitnodebitnode,*bitree;
//按先序序列建立二叉樹
int createbitree(bitree &t)
else
return
0;
} //輸出
void visit(bitree t)
} //先序遍歷
void preorder(bitree t)
} //中序遍歷
void inorder(bitree t)
}
//後序遍歷
void postorder(bitree t)
} /* 先序遍歷(非遞迴)
思路:訪問t->data後,將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,再先序遍歷t的右子樹。
*/void preorder2(bitree t)
else
}//while
} /* 中序遍歷(非遞迴)
思路:t是要遍歷樹的根指標,中序遍歷要求在遍歷完左子樹後,訪問根,再遍歷右子樹。
先將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,訪問t->data,再中序遍歷t的右子樹。
*/void inorder2(bitree t)
else
}//while
} //後序遍歷(非遞迴)
typedef
struct bitnodepostbitnodepost,*bitreepost;
void postorder2(bitree t)
//左右子樹訪問完畢訪問根節點
while(!stack.empty() && (stack.top())->tag == 'r')
//遍歷右子樹
if(!stack.empty())
}//while
} //層次遍歷
void levelorder(bitree t)
//右子樹不空,將右子樹入隊
二叉樹的各種遍歷演算法
typedef struct treenode int data struct treenode left struct treenode right int flag 該標記用於後序非遞迴遍歷 ptree 先序遞迴遍歷 void bt preorder ptree root if root nul...
二叉樹遍歷的各種演算法
二叉樹的遍歷是指按照一定次序訪問二叉樹中的所有節點,且每個節點僅被訪問一次的過程。是最基本的運算,是其他運算的基礎。二叉樹有兩種儲存結構 順序儲存和鏈式儲存 順序儲存 對完全二叉樹來說,可以充分利用儲存空間,但對於一般的二叉樹,只有少數的儲存單元被利用 cpp view plain copy typ...
演算法之二叉樹各種遍歷
樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...