分析
宽度优先遍历使用队列,先进先出,弹出就先放左再放右
代码
void levelOrder(Tree* head){
queue<Tree*> t;
if(head==nullptr){
return;
}
t.push(head);
while(!t.empty()){
head=t.front();
cout<<t.front()->val;
if(head->left!=nullptr){
t.push(head->left);
}
if(head->right!=nullptr){
t.push(head->right);
}
t.pop();
}
}
完整代码
#include<iostream>
#include<queue>
using namespace std;
//结构体定义
class Tree
{
public:
int val;
Tree* left;
Tree* right;
Tree(int x) {
this->val = x;
this->left = NULL;
this->right = NULL;
}
};
void levelOrder(Tree* head) {
queue<Tree*> t;
if (head == nullptr) {
return;
}
t.push(head);
while (!t.empty()) {
head = t.front();
cout << t.front()->val;
if (head->left != nullptr) {
t.push(head->left);
}
if (head->right != nullptr) {
t.push(head->right);
}
t.pop();
}
}
int main()
{
Tree* head = new Tree(5);
head->left = new Tree(3);
head->left->left = new Tree(2);
head->left->right = new Tree(4);
head->right = new Tree(8);
head->right->left = new Tree(6);
head->right->right = new Tree(10);
head->right->left->right = new Tree(7);
levelOrder(head);
system("pause");
return 0;
}