从上往下打印二叉树
从上往下打印二叉树
从上往下打印出二叉树的每个结点,同一层按照从左到右的顺序打印
#include <iostream>
#include <deque>
using namespace std;
struct BinaryTreeNode
{
int data;
struct BinaryTreeNode *lchild;
struct BinaryTreeNode *rchild;
};
typedef struct BinaryTreeNode BinTreeNode;
//先序构造二叉树
BinTreeNode* preOrderCreateTree(BinTreeNode *head)
{
int tmp;
cin >> tmp;
if (tmp == 0)
head = NULL;
else
{
head = new BinTreeNode;
head->data = tmp;
head->lchild = preOrderCreateTree(head->lchild);
head->rchild = preOrderCreateTree(head->rchild);
}
return head;
}
//先序遍历二叉树
void preVisitTree(const BinTreeNode *head)
{
if (head == NULL)
return;
cout << head->data;
preVisitTree(head->lchild);
preVisitTree(head->rchild);
}
void freeTree(BinTreeNode *head)
{
if (head == NULL)
return;
freeTree(head->lchild);
freeTree(head->rchild);
delete head;
}
void printOrderByLayer(const BinTreeNode *head)
{
if (head == NULL)
return;
deque<const BinTreeNode*> myDeque;
myDeque.push_back(head);
while (myDeque.size() > 0)
{
const BinTreeNode *tmp = myDeque.front();
myDeque.pop_front();
cout << tmp->data;
if (tmp->lchild)
myDeque.push_back(tmp->lchild);
if (tmp->rchild)
myDeque.push_back(tmp->rchild);
}
}
int main()
{
BinTreeNode *root = preOrderCreateTree(root);
preVisitTree(root);
cout << endl;
printOrderByLayer(root);
cout << endl;
freeTree(root);
return 0;
}
二叉树的常见问题及其解决程序
【递归】二叉树的先序建立及遍历
在JAVA中实现的二叉树结构
【非递归】二叉树的建立及遍历
二叉树递归实现与二重指针
二叉树先序中序非递归算法
轻松搞定面试中的二叉树题目
本文永久更新链接地址:
评论暂时关闭