1.思路分析
创建二叉树时,由于某个节点的左右子树又是下一次创建时的根节点,所以可以利用递归的思想。
2.代码实现
class Tree{
public:
char elem;
Tree* left;
Tree* right;
};
Tree* PreBuild(){
Tree* root=NULL; //先初始化为空
char e;
cin>>e; //输入前序扩展序列
if(e!='#'){
root=new Tree; //相当于每次递归构建时的根节点
root->elem=e;
root->left=Build(); //递归构建左子树
root->right=Build(); //递归构建右子树
}
return root; //返回已构建好的子树给上一级
}
3.完整代码
#include<iostream>
using namespace std;
class Tree{
public:
char elem;
Tree* left;
Tree* right;
};
Tree* PreBuild(){
Tree* root=NULL; //先初始化为空
char e;
cin>>e; //输入前序扩展序列
if(e!='#'){
root=new Tree; //相当于每次递归构建时的根节点
root->elem=e;
root->left=Build(); //递归构建左子树
root->right=Build(); //递归构建右子树
}
return root; //返回已构建好的子树给上一级
}
void PrepPrint(Tree* node){ //前序遍历
if(node==NULL)
return;
cout<<node->elem<<" ";
PrePrint(node->left);
PrePrint(node->right);
}
int main(){
Tree* root;
cout<<"输入前序序列"<<endl;
root=Build();
PrePrint(root);
return 0;
}
4.注意事项
在建树的过程中,声明了Tree类型的指针root后若输入的字符不为#,要记得先将root用new分配空间,否则会出错。