这段代码实现了二叉树的中序遍历,分别用递归和非递归的方法实现。

函数InOrder1使用递归的方式,首先判断当前节点是否为空,如果不为空则递归遍历左子树,输出当前节点的数据元素,再递归遍历右子树。

函数InOrder2使用非递归的方式,首先将根节点压入栈中,然后不断向左子树遍历并将沿途结点入栈,直到p为空。然后弹出栈顶元素,访问该结点的数据元素,再将p指向右子树。如果栈不为空或p不为空,则继续遍历。

两种方法的时间复杂度均为O(n),但递归方法的空间复杂度较高,非递归方法使用栈存储结点,空间复杂度较低。

typedef struct TNode ElemType data; 数据元素 struct TNode Lsubtree; 左子树 struct TNode Rsubtree; 右子树 TNode pTNode; void InOrder1TNode tree if tree != NULL InOrder1tree-Lsubtree;

原文地址: https://www.cveoy.top/t/topic/eqTB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录