二叉树的广义表创建及中序遍历、后序遍历、层次遍历的非递归算法(C语言)
广义表创建二叉树 关于用广义表的形式表示二叉树的形式如下 ①广义表中的一个字母代表一个结点的数据信息。 ②每个根结点作为由子树构成的表的名字放在义表的前面。 ③每个结点的左子树与右子树之间用逗号分开。若结点只有右子树面无左子树,则该逗号不能省略。 ④在整个广义表的末尾加一个特殊符号(如“@”)作为结束标志。 下面先用自然语言描述算法如下。 依次从广义表中取得-个元素,并对取得的元素做如下相应的处理。 ①若当前取得的元素为字母,则按如下规则建立一个新的(链)结点。 a)若该结点为二叉树的根结点,则将该结点的地址送T。 b)若该结点不是二叉树的根结点,则将该结点作为左孩子(若标志flag为1)或者右子若标志flag为2)链接到其双亲结点上(此时双亲结点的地址在栈顶位置)。 ②若当前取得的元素为左括号“(”,则表明一个子表开始,将标志flag置为1,同时将面那个结点的地址进栈。 ③若当前取得的元素为右括号“)”,则表明一个子表结束,做退栈操作。 ④若当前取得的元素为逗号,则表明以左孩子为根的子树处理完毕,接着应该处理孩子为根的子树,将标志flag置为2。 如此处理广义表中的每一个元素,直到取得广义表的结束符号“@”为止。 二叉树的中序遍历(非递归) 算法的核心思想是: 当P所指的结点不为空时.则将该结点所在链结点的地址进栈,然后再将”指向该结点的左孩子结点