蘋果封殺失敗:Corellium公司面向個人使用者開放在電腦上模擬執行iOS的軟體
阿新 • • 發佈:2021-01-28
技術標籤:二叉樹
1)先序遍歷(根左右)
//先序遍歷
void preorder(node* root)
{
if(root==NULL)
{
return;//到達空樹,遞迴邊界
}
//訪問根節點root,例如將其資料域輸出
printf("%d",root->data)
//訪問左子樹
preorder(root->lchild);
//訪問右子樹
preorder(root->rchild);
}
中序遍歷(左右根)
//中序遍歷
void inorder(node* root)
{
if(root==NULL)
{
return;//空樹,遞迴邊界
}
//訪問左子樹
inorder(root->lchild);
//訪問根節點,例如將其資料域輸出
printf("%d",root->data);
//訪問右子樹
inorder(root->rchild);
}
3)後序遍歷(左右根)
//後序遍歷
void posorder(node* root)
{
if(root==NULL)
{
return;//空樹,遞迴邊界
}
//訪問左子樹
posorder(root->lchild);
//訪問右子樹
posorder(root->rchild);
//訪問根結點,例如將其資料域輸出
printf("%d",root->data);
}
4)層序遍歷(從上到下,從左到右)
- 將根結點root加入佇列q
- 取出隊首元素,訪問它
- 如果該結點有左孩子,將左孩子入隊
- 如果該結點有右孩子,將右孩子入隊
//層序遍歷
void Layerorder(node* root)
{
quede<node*> q;//佇列
q.push (root);//將根結點地址入隊
while(!q.empty())
{
node* now=q.front();//取出隊首元素
q.pop();
printf("%d",now->data);//訪問隊首元素
if(now->lchild!=NULL)//左子樹非空
{
q.push(now->lchild);
}
if(now->rchild!=NULL)//右子樹非空
{
q.push(now->rchild);
}
}
}
注意:這裡使用的佇列中嚴肅是node型而不是node型。這是因為佇列中儲存的知識原元素的一個副本,因此如果佇列中直接存放node型,當修改隊首元素時,就會無法對元素就是修改(即只修改佇列中的副本),故讓佇列中存放node型變數的地址,也就是node型變數,這樣就可以通過訪問地址去修改原元素。