設計一個演算法層序遍歷二叉樹(同一層從左到右訪問)。思想:用一個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。
void HierarchyBiTree(BiTree Root){
LinkQueue *Q; // 儲存當前節點的左右孩子的佇列
InitQueue(Q); // 初始化佇列
if (Root == NULL) return ; //樹為空則返回
BiNode *p = Root; // 臨時儲存樹根Root到指標p中
Visit(p->data); // 訪問根節點
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子進佇列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子進佇列
while (!QueueEmpty(Q)) // 若佇列不空,則層序遍歷 { DeQueue(Q, p); // 出佇列
Visit(p->data);// 訪問當前節點
}
DestroyQueue(Q); // 釋放佇列空間
return ;
這個已經很詳細了!你一定可以看懂的!加油啊!
設計一個演算法層序遍歷二叉樹(同一層從左到右訪問)。思想:用一個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。
void HierarchyBiTree(BiTree Root){
LinkQueue *Q; // 儲存當前節點的左右孩子的佇列
InitQueue(Q); // 初始化佇列
if (Root == NULL) return ; //樹為空則返回
BiNode *p = Root; // 臨時儲存樹根Root到指標p中
Visit(p->data); // 訪問根節點
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子進佇列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子進佇列
while (!QueueEmpty(Q)) // 若佇列不空,則層序遍歷 { DeQueue(Q, p); // 出佇列
Visit(p->data);// 訪問當前節點
if (p->lchild) EnQueue(Q, p->lchild); // 若存在左孩子,左孩子進佇列
if (p->rchild) EnQueue(Q, p->rchild); // 若存在右孩子,右孩子進佇列
}
DestroyQueue(Q); // 釋放佇列空間
return ;
這個已經很詳細了!你一定可以看懂的!加油啊!