【未完待續中】
(一)二叉樹結構的定義
typedef struct BiNode
{
char data;
struct BiNode* lchild;
struct BiNode* rchild;
}BiNode, *PNode;
(二)創建二叉樹
2.1 創建思想演示
2.2 代碼實現
void CreateTree(PNode &root)
{
char ch; cin >> ch;
if (ch == '#') //如果爲#則停止遞歸創建
{
root = NULL;
}
else
{
root = new BiNode();
root->data = ch;
CreateTree(root->lchild);
CreateTree(root->rchild);
}
}
(三)遞歸遍歷二叉樹
3.1 先序遍歷
void PreOrder(PNode root) //遞歸--二叉樹先序遍歷(根左右)
{
if (root == NULL)
return;
cout << root->data << " ";
PreOrder(root->lchild);
PreOrder(root->rchild);
}
3.2 中序遍歷
void InOrder(PNode root) //遞歸--二叉樹中序遍歷(左根右)
{
if (root == NULL)
return;
InOrder(root->lchild);
cout << root->data << " ";
InOrder(root->rchild);
}
3.3 後序遍歷
void PostOrder(PNode root)//遞歸--二叉樹後序遍歷(左右根)
{
if (root == NULL)
return;
PostOrder(root->lchild);
PostOrder(root->rchild);
cout << root->data << " ";
(四)非遞歸遍歷二叉樹
4.1 先序遍歷
void PreTraverse(PNode root) //非遞歸--二叉樹先序遍歷
{
if (root == NULL)
return;
PNode p;
stack<PNode> sta;
sta.push(root);
while (!sta.empty())
{
p = sta.top();
sta.pop();
while (p)
{
cout << p->data << " ";
if (p->rchild)
{
sta.push(p->rchild);
}
p = p->lchild;
}
}
}
4.2 中序遍歷
void InTraverse(PNode root) //非遞歸--二叉樹中序遍歷
{
if (root == NULL)
return;
PNode p;
stack<PNode> sta;
sta.push(root);
while (!sta.empty())
{
while ((p = sta.top()) && p) //先遍歷棧中結點的左孩子
{
sta.push(p->lchild);
}
sta.pop();
if (!sta.empty())
{
p = sta.top();
sta.pop();
cout << p->data << " ";//此時左邊已經遍歷完了
sta.push(p->rchild); //把右孩子放進棧中,對右孩子進行中序遍歷
}
}
}
4.3 後序遍歷