实现一个函数,完成层序遍历二叉树。
思路:使用一个队列,保存根结点,先打印根结点的值,把根结点从队列中清除。把根结点的左结点放入到队列中,把根结点的右结点放入队列中,循环进行此过程。
C++
.h
#ifndef TreeAbout_hpp
#define TreeAbout_hpp
#include <stdio.h>
#endif /* TreeAbout_hpp */
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
};
void printTreeFloorOrder(TreeNode *root);
.cpp
#include "TreeAbout.h"
#include <iostream>
#include <queue>
void printTreeFloorOrder(TreeNode *root){
if (root == NULL) {
return;
}
std::queue<TreeNode *> q;
q.push(root);
while (q.size() > 0) {
TreeNode *node = q.front();
std::cout<<node->val<<std::endl;
q.pop();
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
main函数
#include <iostream>
#include "TreeAbout.h"
int main(int argc, const char * argv[]) {
TreeNode *root = new TreeNode();
TreeNode *left1 = new TreeNode();
TreeNode *right1 = new TreeNode();
TreeNode *left2 = new TreeNode();
TreeNode *right2 = new TreeNode();
root->val = 1;
left1->val = 2;
right1->val = 3;
left2->val = 4;
right2->val = 5;
root->left = left1;
root->right = right1;
left1->left = left2;
left1->right = NULL;
left2->left = NULL;
left2->right = NULL;
right1->right = right2;
right1->left = NULL;
right2->left = NULL;
right2->right = NULL;
printTreeFloorOrder(root);
return 0;
}