请问怎么用非递归算法建立一棵二叉树?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
-------------------------
我是用C++模板写的,希望可以帮助你。
构造方法是:输入一串字符;
如果直接输入#,则是空树;否则则是AB###;即以前序顺序输入;
代码:
void Tree<T>::creat_tree(TreeNode<T> * &pointer)
{
//递归实现对森林的赋值;**********************
/*T temp;
cin>>temp;
if(temp=='#')
{
pointer=NULL;
return;
}
pointer=new TreeNode<T>;
pointer->get_val()=temp;
creat_tree(pointer->get_LeftMostcld());
creat_tree(pointer->get_Rightslib());*/
//非递归实现对森林的赋值;*******************************
T temp;
stack<TreeNode<T> *> creat_help;
cin>>temp;
if(temp=='#')
{
pointer=NULL;
return;
}
pointer=new TreeNode<T>;
pointer->get_val()=temp;
creat_help.push(pointer);
TreeNode<T> * temp_pointer=pointer;
int tag=0; //标志位,值为0,表示处理结点的左孩子,值为1,表示处理结点的右孩子;
while(cin>>temp)
{
if(temp!='#')
{
if(tag==0)
{
temp_pointer->get_LeftMostcld()=new TreeNode<T>;
temp_pointer->get_LeftMostcld()->get_val()=temp;
creat_help.push(temp_pointer->get_LeftMostcld());
temp_pointer=temp_pointer->get_LeftMostcld();
}
else
{
temp_pointer->get_Rightslib()=new TreeNode<T>;
temp_pointer->get_Rightslib()->get_val()=temp;
creat_help.push(temp_pointer->get_Rightslib());
temp_pointer=temp_pointer->get_Rightslib();
tag=0;
}
}
else
{
if(tag==0)
{
temp_pointer->get_LeftMostcld()=NULL;
tag=1;
}
else
{
temp_pointer->get_Rightslib()=NULL;
}
if(creat_help.empty())
return;
temp_pointer=creat_help.top();
creat_help.pop();
}
}
}