層次遍歷二叉樹


例如,上面這棵二叉樹層次遍歷結果為:1 2 3 4 5

Algorithm:

定義函數 levelorder(tree) 為層次遍歷二叉樹 tree
1) 創建一個空隊列 q
2) temp_node = root // 從根節點開始遍歷
3) 只要 temp_node 不為 NULL,則執行如下循環
    a) 打印 temp_node->data.
    b) 將 temp_node 的子節點入隊(以先左子節點后右子節點順序)q
    c) 出隊一個節點並將其賦值給temp_node


#include <iostream> 
#include <queue> 
using namespace std; 
  
// 二叉樹節點
struct Node { 
    int data; 
    struct Node *left, *right; 
}; 
  
void printLevelOrder(Node *root) { 
    if (root == NULL)  return; 
  
    // 創建一個空隊列 
    queue<Node *> q; 
    q.push(root); 
  
    while (q.empty() == false) { 
        // 遍歷當前節點
        Node *node = q.front(); 
        cout << node->data << " "; 
        q.pop(); 
  
        // 左子節點入隊
        if (node->left != NULL) 
            q.push(node->left); 
  
        // 右子節點入隊
        if (node->right != NULL) 
            q.push(node->right); 
    } 
} 
  
/*
* 輔助函數
* 用給定的值創建一個二叉樹節點,起左右子節點均為空
*/
Node* newNode(int data) { Node *temp = new Node; temp->data = data; temp->left = temp->right = NULL; return temp; } int main() { Node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); cout << "Level Order traversal of binary tree is \n"; printLevelOrder(root); return 0; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM