二叉树的基本操作小结

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  //前序遍历的非递归实现

  /*

  思想:利用栈来实现;根结点进栈,之后栈非空,弹出,接着根节点的右结点进栈,之后,左节点进栈;接着,弹出栈顶元素(输出),

  此结点的右结点进栈,之后左节点进栈,弹出栈顶元素(输出)...一直这样下去,直到栈为空。

  */

  void Preorder2(BTree* bt)

  {

  BTree* p;

  Stack st;

  st.top=-1;

  if (NULL==bt)

  {

  return;

  }

  else

  {

  st.top++;

  st.a[st.top]=bt;

  while (st.top!=-1)

  {

  p=st.a[st.top];

  st.top--;

  printf("%c ",p->data);

  if (p->right!=NULL)

  {

  st.top++;

  st.a[st.top]=p->right;

  }

  if (p->left!=NULL)

  {

  st.top++;

  st.a[st.top]=p->left;

  }

  }

  }

  }

  //中序遍历,递归实现

  void Inorder(BTree* bt)

  {

  if (NULL!=bt)

  {

  Inorder(bt->left);

  printf("%c ",bt->data);

  Inorder(bt->right);

  }

  }

  //中序遍历,非递归实现

  /*

  思想:利用栈。从根节点开始,循环,只要有左子节点则进栈,直到左子节点为空。接着弹出栈顶输出,判断该结点是否有右子节点,

  若有则进栈,若没有继续弹栈。有右子节点的情况,判断该节点是否有左子节点,有则进栈,直到左子节点为空;若该右子节点没有

  左子节点,则弹栈;判断弹出的节点,是否有右子节点,若有则进栈,没有继续弹栈;接着又要判断刚进栈的这个节点,是否有左子节点,有则进栈,没有则继续弹栈。重复下去....

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答