樹的遍歷(Trees Traversals)

樹的遍歷


想要訪問二叉樹中的節點需要遍歷整棵樹。通常有三種遍歷樹的形式,每種遍歷形式產生不同順序的元素。

中序遍歷(Left-Root-Right)


中序遍歷首先訪問左子節點,然後訪問根節點,最後再訪問右子節點。遞歸重複此操作,直到遍歷完樹中的所有元素。

中序遍歷算法步驟

  1. 遍歷左子樹,中序遞歸調用(左子樹)
  2. 訪問根結點
  3. 遍歷右子樹,中序遞歸調用(右子樹)

中序遍歷代碼

void inorder(struct Node* node){
   if (node==NULL)return;
   inorder(node->left);
   cout<<node-data<<endl;
   inorder(node->right);
}

前序遍歷(Root-Left-Right)


在前序遍歷中,首先訪問根節點,然後訪問左節點,最後訪問右節點。重複執行遞歸,直到所有節點都被遍歷。

前序遍歷算法步驟

  1. 訪問根節點
  2. 遍歷左子樹,前序遞歸調用(左子樹)
  3. 遍歷右子樹,前序遞歸調用(右子樹)

前序遍歷代碼

void preorder(struct Node* node){
    if (node==NULL)return;
    cout<<node->data<<endl;
    preorder(node->left);
    preorder(node->right);
}

後序遍歷(Left-Right-Root)


後序遍歷首先訪問左子節點,然後訪問右子節點,最後訪問根節點。遞歸重複此操作,直到樹中的每個元素都被訪問。

後序遍歷算法步驟

  1. 遍歷左子樹,後序遞歸調用(左子樹)
  2. 遍歷右子樹,後序遞歸調用(右子樹)
  3. 訪問根節點

後序遍歷代碼

void postorder(struct Node* node){
    if (node==NULL)return;
    postorder(node->left);
    postorder(node->right);
}

算法時間複雜度


每棵樹的遍歷的時間複雜度均爲O(n),遍歷樹所需時間隨元素線性增加

更多內容,歡迎訪問:


在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章