二叉树遍历C语言(递归,非递归)六种算法.pdfVIP

  • 0
  • 0
  • 约2.25万字
  • 约 15页
  • 2020-07-16 发布于天津
  • 举报

二叉树遍历C语言(递归,非递归)六种算法.pdf

数据结构(双语) ——项目文档报告 用两种方式实现表达式自动计算 专 业: 班 级: 指导教师: 姓 名: 学 号: 文档 实用标准文案 目 录 一、设计思想……………………………………………………… .01 二、算法流程图…………………………………………………… .02 三、源代码………………………………………………………… .04 四、运行结果……………………………………………………… .11 五、遇到的问题及解决…………………………………………… .11 六、心得体会……………………………………………………… .12 文档 实用标准文案 一、设计思想 二叉树的遍历分为三种方式, 分别是先序遍历, 中序遍历和后序遍历。 先序遍历实现的 顺序是:根左右,中序遍历实现的是:左根右,后续遍历实现的是:左右根。根据不同的算 法分,又分为递归遍历和非递归遍历。 递归算法: 1.先序遍历:先序遍历就是首先判断根结点是否为空,为空则停止遍历,不为空则将 左子作为新的根结点重新进行上述判断, 左子遍历结束后, 再将右子作为根结点判断, 直至 结束。到达每一个结点时,打印该结点数据,即得先序遍历结果。 2. 中序遍历: 中序遍历是首先判断该结点是否为空, 为空则结束, 不为空则将左子作为 根结点再进行判断, 打印左子, 然后打印二叉树的根结点, 最后再将右子作为参数进行判断, 打印右子,直至结束。 3. 后续遍历:指针到达一个结点时, 判断该结点是否为空,为空则停止遍历,不为空则 将左子作为新的结点参数进行判断, 打印左子。 左子判断完成后, 将右子作为结点参数传入 判断,打印右子。左右子判断完成后打印根结点。 非递归算法: 1. 先序遍历:首先建立一个栈, 当指针到达根结点时,打印根结点,判断根结点是否有 左子和右子。 有左子和右子的话就打印左子同时将右子入栈, 将左子作为新的根结点进行判 断,方法同上。 若当前结点没有左子, 则直接将右子打印, 同时将右子作为新的根结点判断。 若当前结点没有右子, 则打印左子, 同时将左子作为新的根结点判断。 若当前结点既没有左 子也没有右子,则当前结点为叶子结点,此时将从栈中出栈一个元素,作为当前的根结点, 打印结点元素, 同时将当前结点同样按上述方法判断, 依次进行。 直至当前结点的左右子都 为空,且栈为空时,遍历结束。 2. 中序遍历:首先建立一个栈,定义一个常量 flag (flag 为 0 或者 1),用 flag 记录 结点的左子是否去过,没有去过为 0,去过为 1,默认为 0. 首先将指针指向根结点,将根结 点入栈,然后将指针指向左子, 左子作为新的结点,将新结点入栈,然后再将指针指向当前 结点的左子,直至左子为空,则指针

文档评论(0)

1亿VIP精品文档

相关文档