以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 算法理论与分析 』  (http://bbs.xml.org.cn/list.asp?boardid=60)
----  求教由二叉树的前序遍历序列建立二叉树的非递归算法  (http://bbs.xml.org.cn/dispbbs.asp?boardid=60&rootid=&id=32236)


--  作者:eq19840910
--  发布时间:5/13/2006 10:20:00 AM

--  求教由二叉树的前序遍历序列建立二叉树的非递归算法
具体的题目是:创建存储结构为二叉链表的二叉树,并按中序输出。创建时,以前序遍历顺序输入结点值,约定有效的结点值非0,0为空指针。请使用非递归方法实现。在C上做,我想要完整的代码,谢谢大家

--  作者:Logician
--  发布时间:5/13/2006 4:21:00 PM

--  
仅根据“前序遍历顺序”怎么能唯一地确定二叉树呢?
--  作者:phoenixinter
--  发布时间:5/13/2006 5:49:00 PM

--  
A binary tree can't be uniquely determined if you just give the preorder traversal.
--  作者:Supremgoooo
--  发布时间:6/12/2006 2:12:00 PM

--  
只有前序是不能唯一确定的,但是又知道左右节点的信息是可以唯一确定的
lz问的就是后者吧
建树的非递归算法代码如下:

struct nodearray
{
 TreeNodeValue info; //节点信息值
 bool ltag,rtag; //0表示没,1表示有
};
TreeNode *(nodearray nodearray[],int n)
//nodearray[]里面节点按前序存放,n表示节点数
{
 if(n==0) return NULL;
 TreeNode *r,*p1,*p2;
 p1=new TreeNode;
 r=p1;
 stack<TreeNode> s;
 for(int i=0;i<n-1;i++)
 {
  p1->setv(nodearray[i].info);
  if(nodearray[i].rtag==1)
  {
   p2==new TreeNode;
   p1->setrc(p2);
   stack.push(p2);
  }
  else p1->setrc(NULL);
  
  if(nodearray[i].ltag==1)
  {
   p2==new TreeNode;
   p1->setlc(p2);
   p1=p1->lc();
  }
  else
  {
   p1->setlc(NULL);
   p1=stack.pop();
  }
  
 }
 //最后一点处理
 p1->setlc(NULL);
 p1->setrc(NULL);
 p1->setv(arraynode[n-1].info);
 return r;
}
然后再中序周游一遍就ok了


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,156.250ms