#include<iostream>
#include<queue>
#include<Windows.h>
using namespace std;
typedef struct BinaryNode
{
char NodeDate;
struct BinaryNode *left;
struct BinaryNode *right;
}BinaryNode;
//先序的方式建立一个二叉树
BinaryNode * CreatBinaryTreeByPreorder()
{
char ch;
BinaryNode * Tree=new BinaryNode;
scanf("%c",&ch);
if(ch=='#')
Tree=NULL;
else
{
Tree->NodeDate=ch;
Tree->left=CreatBinaryTreeByPreorder();
Tree->right=CreatBinaryTreeByPreorder();
}
return Tree;
}
//先序的方式访问二叉树
void VisitByPreorder(BinaryNode * Tree)
{
if(Tree)
{
cout<<Tree->NodeDate<<" ";
VisitByPreorder(Tree->left);
VisitByPreorder(Tree->right);
}
}
//层式访问二叉树
queue<BinaryNode*> NodePointer;
void VisitByUpDown(BinaryNode* Tree)
{
if(!NodePointer.empty())
{
NodePointer.pop();
}
if(Tree)
{
cout<<Tree->NodeDate;
if(Tree->left!=NULL && Tree->right!=NULL)
{
NodePointer.push(Tree->left);
NodePointer.push(Tree->right);
}
}
if(!NodePointer.empty())
{
VisitByUpDown(NodePointer.front());
}
}
int main()
{
BinaryNode * Tree;
Tree=CreatBinaryTreeByPreorder();
cout<<"先序访问输出"<<endl;
VisitByPreorder(Tree);
cout<<endl;
cout<<"层式访问输出"<<endl;
VisitByUpDown(Tree);
return 0;
}
从上到下打印二叉树-剑指offer23题
最新推荐文章于 2022-04-20 10:07:15 发布