1. 程式人生 > 資訊 >蘋果封殺失敗:Corellium公司面向個人使用者開放在電腦上模擬執行iOS的軟體

蘋果封殺失敗:Corellium公司面向個人使用者開放在電腦上模擬執行iOS的軟體

技術標籤:二叉樹

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)層序遍歷(從上到下,從左到右)

  1. 將根結點root加入佇列q
  2. 取出隊首元素,訪問它
  3. 如果該結點有左孩子,將左孩子入隊
  4. 如果該結點有右孩子,將右孩子入隊
//層序遍歷
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型變數,這樣就可以通過訪問地址去修改原元素。