谁能给一个中续遍历二叉树的程序?C语言。

二叉树用顺序存储,或者链式存储都行。

/* 树的中续遍历的递归算法*/

#include<stdio.h>

#define MAXNUM 20
#define null -1

/* typedef int DataType; */
struct ParTreeNode {
/*DataType info; 结点中的元素 */
int parent; /* 结点的父结点位置 */
};

struct ParTree {
int n; /* 树中结点的个数 */
struct ParTreeNode nodelist[MAXNUM]; /* 存放树中的结点 */
};

typedef struct ParTree *PParTree; /* 树类型的指针类型 */

int rightSibling_partree(PParTree t, int p) {
int i;
if (p >= 0 && p < t->n) {
for (i = p+1; i <= t->n; i++)
if (t->nodelist[i].parent == t->nodelist[p].parent)
return(i);
}
return null;
}

/* 依先根序列存储时,求最左子结点的运算可简化如下*/
int leftChild_partree(PParTree t, int p) {
if (t->nodelist[p+1].parent == p)
return(p+1);
else
return null;
}

typedef int Node;

void visit(Node p) { printf("%d ",p); }

void inOrder( PParTree t, Node p ) {
Node c;
c = leftChild_partree ( t, p );
if (c == null) visit( p );
else {
inOrder(t, c);
visit( p );
c = rightSibling_partree (t, c );
while (c != null) {
inOrder ( t, c );
c = rightSibling_partree (t, c );
}
}
}

struct ParTree tree = {10, -1,0,1,1,3,3,3,0,7,7};

int main(){
inOrder(&tree, 0);
putchar('\n');
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-02-02
//链式存储的情况下:(前提是你的node和Tree结构都已经定义好了)
//访问结点的函数的指针声明:
void (*visitor) (node*);
//访问结点的函数定义:
void v(node* p)
{
//自己添加访问代码
}

//中序遍历:
void MidOrder(Tree T, void (*visitor)(node*))
{
if (T)
{
MidOrder(T->left, v);
v(T);
MidOrder(T->right, v);
}
}