常用的面试题,故温习了一遍。简单,上代码。
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct binaryTreeNode{
int data;
struct binaryTreeNode *pLeft;
struct binaryTreeNode *pRight;
}BNode;
//二叉树的初始化(建立空根节点)
/*BNode *initBTree()
{
BNode *head=(BNode*)malloc(sizeof(BNode));
head=NULL;
return head;
}
*/
//建立二叉树
BNode *buildBTree(int n)
{
BNode *root=(BNode*)malloc(sizeof(BNode));
root->data=n;
root->pLeft=root->pRight=NULL;
return root;
}
//向二叉树里添加结点
void addBTree(BNode *root,int n)
{
if(n<root->data)
{
if(root->pLeft==NULL)
root->pLeft=buildBTree(n);
else
addBTree(root->pLeft,n);
}
else if(n>root->data)
{
if(root->pRight==NULL)
root->pRight=buildBTree(n);
else
addBTree(root->pRight,n);
}
else
cout<<"Number repeated!"<<endl;
}
//先序遍历二叉树
void preTraversBTree(BNode *root)
{
cout<<root->data<<endl;
if(root->pLeft!=NULL)
preTraversBTree(root->pLeft);
if(root->pRight!=NULL)
preTraversBTree(root->pRight);
}
//中序遍历二叉树
void midTraversBTree(BNode *root)
{
if(root->pLeft!=NULL)
midTraversBTree(root->pLeft);
cout<<root->data<<endl;
if(root->pRight!=NULL)
midTraversBTree(root->pRight);
}
//后序遍历二叉树
void postTraversBTree(BNode *root)
{
if(root->pLeft!=NULL)
postTraversBTree(root->pLeft);
if(root->pRight!=NULL)
postTraversBTree(root->pRight);
cout<<root->data<<endl;
}
//主函数
int main()
{
BNode *root=buildBTree(24);
addBTree(root,15);
addBTree(root,21);
addBTree(root,10);
addBTree(root,6);
addBTree(root,87);
addBTree(root,43);
addBTree(root,22);
addBTree(root,19);
addBTree(root,4);
addBTree(root,75);
addBTree(root,16);
addBTree(root,50);
addBTree(root,2);
addBTree(root,11);
//遍历二叉树
cout<<"Here is the previous Traversal:"<<endl;
preTraversBTree(root);
cout<<"Here is the middle Traversal:"<<endl;
midTraversBTree(root);
cout<<"Here is the post Traversal:"<<endl;
postTraversBTree(root);
system("Pause");
return 0;
}