Ejemplo n.º 1
0
//二叉树的先序遍历递归方法
void PreOrderTraverse(treeNode *T,int node1,int node2)
{
    if(!T)
        return;
    if(T->data==node1)
        pnode1=T;
    if(T->data==node2)
        pnode2=T;
    PreOrderTraverse(T->lchild,node1,node2);
    PreOrderTraverse(T->rchild,node1,node2);
}
Ejemplo n.º 2
0
Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)) {
	if (T) {
		if (Visit(T->data))
			if (PreOrderTraverse(T->lchild, Visit))
				if (PreOrderTraverse(T->rchild, Visit))
					return OK;
		return ERROR;				
	} else {
		return OK;
	}
}
/*先序遍历二叉树*/
void PreOrderTraverse(BiTree T)
{
	if(!T)
		return;
	else
	{
		printf("%c",T->data);
		PreOrderTraverse(T->lchild);
		PreOrderTraverse(T->rchild);	
	}
}
Ejemplo n.º 4
0
void PreOrderTraverse(BiTree T)
{
	BiTree p = NULL;
	p = T;
	if (p != NULL) {
		printf("%4c",p->data);
		PreOrderTraverse(p->lchild);
		PreOrderTraverse(p->rchild);
	}

}
Ejemplo n.º 5
0
void PreOrderTraverse(SearchTree T)
{
    if(T==NULL)
        return;
    else
    {
        printf("%d ",T->Element);
        PreOrderTraverse(T->LChild);
        PreOrderTraverse(T->RChild);
    }
}
Status PreOrderTraverse(BiTree T)
{
   // 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
   //补全代码,可用多个语句
   if(T)
   {
       if(PrintElement(T->data))
          if(PreOrderTraverse(T->lchild))
            if(PreOrderTraverse(T->rchild))
       return OK;
       return ERROR;
   }else return OK;
} // PreOrderTraverse
Ejemplo n.º 7
0
void PreOrderTraverse(BSTree BST)
{
	if (BST)
	{
		int i;
		for (i = 0; i < BST->count; i++)
		{
			printf("%d ", BST->value);
		}
		PreOrderTraverse(BST->left);
		PreOrderTraverse(BST->right);
	}
}
Ejemplo n.º 8
0
status PreOrderTraverse(Node* T)            //前序递归遍历二叉树算法 T为根节点
{
    if(T == NULL)
    {
        return TRUE;
    }

    printf("%d ",T->data);
    PreOrderTraverse(T->lChild);
    PreOrderTraverse(T->rChild);

    return TRUE;
}
int main(int argc, char const *argv[])
{
  int i, Len;
  int* Array;
  Tree T;

  Len = 16;
  Array = malloc(sizeof(int) * Len);

  for (i = 0; i < Len; ++i)
    Array[i] = i;

  T = sortedArrayToBST(Array, Len);

  PreOrderTraverse(T);
  printf("\n");

  InOrderTraverse(T);
  printf("\n");

  PostOrderTraverse(T);
  printf("\n");

  return 0;
}
int main(int argc, char *argv[]) 
{
	
	BiTree T,H;
	printf("请创建一棵二叉树(如:'ABDH##I##EJ###CF##G##')\n");
	CreateBinaryTree(&T);
	
	printf("\n二叉树的深度为:%d,结点数目为:%d\n",BinaryDepth(T),NodeCount(T));
	
	printf("\n先序遍历的结果是:\n");
	PreOrderTraverse(T);
	
	printf("\n中序遍历的结果是:\n");
	InOrderTraverse(T);
	
	printf("\n后序遍历的结果是:\n");
	PostOrderTraverse(T);
	
	printf("\n对二叉树进行中序线索化\n");
	InOrderThreading(&H,T);
	printf("\n中序遍历线索二叉树的结果是:\n");
	InOrderTraverseThreadTree(H);
	
	printf("\n摧毁一棵二叉树\n");
	DestoryBinaryTree(&T);
	printf("\n二叉树的深度为:%d,结点数目为:%d\n",BinaryDepth(T),NodeCount(T));
	return 0;
}
Ejemplo n.º 11
0
main() {
	BiTNode * n1 = MakeNode(10, NULL, NULL);
	BiTNode * n2 = MakeNode(20, NULL, NULL);
	BiTNode * n3 = MakeNode(30, n1, n2);
	BiTNode * n4 = MakeNode(40, NULL, NULL);
	BiTNode * n5 = MakeNode(50, NULL, NULL);
	BiTNode * n6 = MakeNode(60, n4, n5);
	BiTNode * n7 = MakeNode(70, NULL, NULL);

	BiTree tree = InitBiTree(n7);
	SetLChild(tree, n3);
	SetRChild(tree, n6);

	printf("树的深度为:%d \n", GetDepth(tree));
	printTree(tree, GetDepth(tree));

	printf("\n先序遍历如下:");
	PreOrderTraverse(tree, print);

	printf("\n中序遍历如下:");
	InOrderTraverse(tree, print);

	printf("\n后序遍历如下:");
	PostOrderTraverse(tree, print);

	DeleteChild(tree, 1);
	printf("\n后序遍历如下:");
	PostOrderTraverse(tree, print);

	DestroyBiTree(tree);
	if (IsEmpty(tree))
		printf("\n二叉树为空,销毁完毕\n");
}
Ejemplo n.º 12
0
int main(int argc, char **argv)
{
	CSTree T;
	TElemType e;
	TElemType e1;
	InitTree(&T);
	printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\
			TreeEmpty(T), Root(T), TreeDepth(T));
	CreateTree(&T);
	printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\
				TreeEmpty(T), Root(T), TreeDepth(T));
	printf("先根遍历树T:\n");
	PreOrderTraverse(T, vi);
	printf("\n请输入等修改的结点的值 新值:");
	scanf("%c%*c%c%*c", &e, &e1);
	Assign(&T, e, e1);
	printf("后根遍历修改后的树T:\n");
	PostOrderTraverse_recurssion1(T, vi);
	printf("\n");
	printf("PostOrderTraverse_recurssion1 complete!\n");
	PostOrderTraverse_recurssion2(T, vi);
	printf("\n");
	printf("PostOrderTraverse_recurssion2 complete!\n");
	printf("\n%c的双亲是%c, 长子是%c,下一个兄弟是%c\n", e1, Parent(T, e1),\
			LeftChild(T, e1), RightSibling(T, e1));
	printf("层序遍历树:\n");
	LevelOrderTraverse(T, vi);
	DestroyTree(&T);
	return EXIT_SUCCESS;
}
Ejemplo n.º 13
0
void TestOrderTraverse(){
	BitNode lchild ={
		'l',
		NULL,NULL
	

	};
	BitNode rchild = {
		'r',
		NULL,NULL

	};
	BitNode root  = {
		'm',
		&lchild,&rchild

	};
	BitTree root2 = &root;
	BitTree root3 = &root;
	PreOrderTraverse(&root);
	printf("\n");
	InOrderTraverse(root2);
	printf("\n");
	PostOrderTraverse(root3);
	printf("\n");

}
Ejemplo n.º 14
0
/**
*Binary Search Tree Tester
*/
int main()
{
	SearchTree T=(SearchTree)malloc(sizeof(struct TreeNode));
	T=NULL;
	int a[6]={6,4,2,5,8,10};
	T=CreateBinarySearchTree(T,a,6);
	//T=Insert(4,T);
	PreOrderTraverse(T);
	printf("\n");
	T=Delete(8,T);
	printf("main %d\n",T->Element );
	PreOrderTraverse(T);
	//Position P=Find(7,T);
	//printf("%d\n",P->Element );
	return 0;
}
Ejemplo n.º 15
0
void test1()
{
	int data[] = {35, 6, 15, 65, 7, 46, 17, 43, 3, 7};
//	int data[] = {3};
	int size = sizeof(data)/sizeof(*data);
//	printf("size = %d\n", size);
	BSTree BST = NULL;
	BuildBSTree(BST, data, 0, size - 1);
	PreOrderTraverse(BST);
	printf("\n");
	MidOrderTraverse(BST);
	printf("\n");
	PostOrderTraverse(BST);
	printf("\n");

	BSTree node = SearchBST(BST, 17, 0);
	if (!node)
		printf("Search failed.\n");
	else
		printf("Search success, the search value is %d.\n", node->value);

	int n;
	scanf("%d", &n);
	while (n != -1)
	{
		DeleteNode(BST, n);
//		printf("Delete node %d.\n", n);
		MidOrderTraverse(BST);
		printf("\n");
		scanf("%d", &n);
	}

	printf("\n");
	
}
int main()   //主函数
{
    BiTree  T=NULL;
    int i,n,e;
    //生成二叉排序树T
    scanf("%d",&i);
    while(i!=-1)
    {
        e=i;
        InsertBiTree(T,e);
        scanf("%d",&i);
    }
    //前、中、后序遍历二叉树
    PreOrderTraverse(T,PrintElement);
    printf("\n");
    InOrderTraverse(T,PrintElement);
    printf("\n");
    PostOrderTraverse(T,PrintElement);
    printf("\n");
    
         //计数并输出
    printf("%d\n", TreeCount(T));
        

    return 0;//补充代码
 }//main
Ejemplo n.º 17
0
int main(int argc, char const *argv[])
{
	//int err;
	struct Tree *T;
	char *ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
	T = CreateTree(ch);

	printf("递归先序遍历\n");
	PreOrderTraverse(T);
	printf("\n");

	printf("递归中序遍历\n");
	InOrderTraverse(T);
	printf("\n");

	printf("递归后序遍历\n");
	PostOrderTraverse(T);
	printf("\n");

	printf("非递归先序遍历\n");
	PreOrderTraverseStack(T);
	printf("\n");

	printf("非递归中序遍历\n");
	InOrderTraverseStack(T);
	printf("\n");

	printf("非递归后序遍历\n");
	PostOrderTraverseStack(T);
	printf("\n");
	return 0;
}
int main(int argc, char const *argv[])
{
  Tree T;
  int Postorder[] = {4, 7, 9, 12, 10, 8};
  int Inorder[] = {4, 7, 8, 9, 10, 12};

  // T = CreateTree();

  // PreOrderTraverse(T);
  // printf("\n");

  // InOrderTraverse(T);
  // printf("\n");

  // PostOrderTraverse(T);
  // printf("\n");


  T = buildTree(Inorder, sizeof(Inorder) / sizeof(Inorder[0]), Postorder, sizeof(Postorder) / sizeof(Postorder[0]));

  PreOrderTraverse(T);
  printf("\n");

  InOrderTraverse(T);
  printf("\n");

  PostOrderTraverse(T);
  printf("\n");
  return 0;
}
Ejemplo n.º 19
0
int main()
{
	BiTree root=NULL;
	printf("Create BiTree..\n");
	CreateBiTree(&root);
	printf("\nDone!!!!\n");

	printf("PreOrderTraverse..\n");
	PreOrderTraverse( root);
	printf("\n");
	PreOrderTraverse_1( root);
	printf("\nDone!!!!\n");

	printf("InOrderTraveerse..\n");
 	InOrderTraverse(root);
	printf("\n");
 	InOrderTraverse_1(root);
	printf("\nDone!!!!\n");

	printf("PostOrderTravaerse..\n");
	PostOrderTraverse(root);
	printf("\n");
	PostOrderTraverse_1(root);
	printf("\nDone\n");
	BiTree_free(&root);

	return 0;
}
Ejemplo n.º 20
0
int main()
{
	Status i;
	int j;
	position p;
	TElemType e;
	TElemType s;

	InitBiTree( T );
	CreateBiTree( T );
	printf("After initializing the Tree, is the Tree empty? Yes:1, No:0, the depth is: %d\n", BiTreeEmpty( T ), BiTreeDepth(T));
	i = Root( T, &e );
	if( i )
		printf("The root of the tree is: %d\n", e);
	else
		printf("The tree is empty!\n");

	printf("Traverse_1:\n");
	LevelOrderTraverse( T, visit );

	printf("Traverse_2:\n");
	InOrderTraverse( T, visit );

	printf("Traverse_3:\n");
	PostOrderTraverse( T, visit );

	printf("input the level number to be modified \n");
	scanf(" %d%d", &p.level, &p.order);
	e = Value( T, p);

	printf("The old value is %d, input new value: ", e);
	scanf(" %d", &e);

	Assign( T, p, e);
	printf("Traverse_1:\n");
	PreOrderTraverse( T, visit );

	printf("The parent of node %d is %d, left and right children are: ", e, Parent(T, e));
	printf("%d, %d, left and rignt brothers are:", LeftChild(T, e), RightChild(T, e));
	printf("%d, %d\n", LeftSibling(T, e), RightSibling(T, e));

	InitBiTree( s );
	printf("Initializing a Tree that has empty right subtree:\n");
	CreateBiTree( s );

	printf("The tree s insert to the tree T, input the parent node of s, s is left subtree or right subtree.");
	scanf(" %d%d%d", &p.level, &p.order, &j);
	DeleteChild( T, p, j);
	Print( T );

	clearBiTRee( T );
	printf("After clearing the tree, is the tree empty? Yes:1, No:0 %d\n", BiTreeEmpty( T ), BiTreeDepth(T));
	i = Root( T, &e );

	if( i )
		printf("The root of the bitree is %d\n", e);
	else
		printf("The tree is empty, no root!\n");
}
Ejemplo n.º 21
0
Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
   // 算法6.1
   // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数,
   // 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
   // 最简单的Visit函数是:
   //     Status PrintElement( ElemType e ) {  // 输出元素e的值
   //        printf( e );  // 实用时,加上格式串
   //        return OK;
   //     }
   // 调用实例:PreOrderTraverse(T, PrintElement);
   if (T) {
      if (Visit(T->data))
         if (PreOrderTraverse(T->lchild, Visit))
            if (PreOrderTraverse(T->rchild, Visit)) return OK;
      return ERROR;
   } else return OK;
} // PreOrderTraverse
Ejemplo n.º 22
0
int main(int argc, char const *argv[])
{
	BiTree test = NULL;

	CreateBitree(&test);
	PreOrderTraverse(test, PrintElement);

	return 0;
}
Ejemplo n.º 23
0
int main()
{
	BiThrTree bt,btt;
	CreateBiTree(bt);
	InOrderTraverse(btt,bt);
	PreOrderTraverse(bt);
	printf("\n");
	return 0;
}
Ejemplo n.º 24
0
 int main()
 {
 	int level = 1;
 	BTree T = NULL;
 	CreateTree(T);
 	PreOrderTraverse(T,level);
 	return 0;
 	
 }
int main()
{
	Status i;
	Position p;
	TElemType e;
	SqBiTree T;
	InitBiTree(T);
	CreateBiTree(T);
	printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
	i=Root(T,&e);
	if(i)
		printf("二叉树的根为:%d\n",e);
	else
		printf("树空,无根\n");
	printf("层序遍历二叉树:\n");
	LevelOrderTraverse(T);
	printf("前序遍历二叉树:\n");
	PreOrderTraverse(T);
	printf("中序遍历二叉树:\n");
	InOrderTraverse(T);
	printf("后序遍历二叉树:\n");
	PostOrderTraverse(T);
	printf("修改结点的层号3本层序号2。");
	p.level=3;
	p.order=2;
	e=Value(T,p);
	printf("待修改结点的原值为%d请输入新值:50 ",e);
	e=50;
	Assign(T,p,e);
	printf("前序遍历二叉树:\n");
	PreOrderTraverse(T);
	printf("结点%d的双亲为%d,左右孩子分别为",e,Parent(T,e));
	printf("%d,%d,左右兄弟分别为",LeftChild(T,e),RightChild(T,e));
	printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e));
	ClearBiTree(T);
	printf("清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
	i=Root(T,&e);
	if(i)
		printf("二叉树的根为:%d\n",e);
	else
		printf("树空,无根\n");
	
	return 0;
}
int main()   //主函数
{
    BiTree  Ta=NULL,Tb=NULL;
    int i,n,e;
    scanf("%d",&n);//生成二叉排序树Ta
    for(i=0;i<n;i++){
        scanf("%d",&e);
        InsertBiTree(Ta,e);
    }
    //前、中、后序遍历二叉树
    PreOrderTraverse(Ta,PrintElement);
    printf("\n"); //getchar();
    InOrderTraverse(Ta,PrintElement);
    printf("\n"); //getchar();
    PostOrderTraverse(Ta,PrintElement);
    printf("\n"); //getchar();
    
    //printf("Start to copy:\n");
    //getchar();
    TreeCopy(Ta,Tb);//复制生成Tb 

    scanf("%d",&e);
    InsertBiTree(Tb,e);//在Tb中插入新结点

    PreOrderTraverse(Tb,PrintElement);
    printf("\n");
    InOrderTraverse(Tb,PrintElement);
    printf("\n");
    PostOrderTraverse(Tb,PrintElement);
    printf("\n");

    scanf("%d",&e);
    InsertBiTree(Ta,e);
    PreOrderTraverse(Ta,PrintElement);
    printf("\n");
    InOrderTraverse(Ta,PrintElement);
    printf("\n");
    PostOrderTraverse(Ta,PrintElement);
    printf("\n");
    

    return 0;//补充代码
 }//main
Ejemplo n.º 27
0
int main(void){
	BiTree T;
	int i,j;
	printf("创建15个随机数据\n");
	CreatBST(T,15,InputElemType);
	printf("\n中序遍历随机数据:\n");
	PreOrderTraverse(T,VisitElemType);
	printf("\n\n随机删除10个数据:\n");
	for(i=0;i<10;i++){
		j=rand()%50;
		if(DeleteBST(T,j))printf("%3d %3d 删除成功! V\n",i,j);
		else printf("%3d %3d 删除失败! X\n",i,j);
	}
	printf("\n中序遍历删除后的数据:\n");
	PreOrderTraverse(T,VisitElemType);
	printf("\nResult End!\n");
	system("pause");
	return 0;
}
Ejemplo n.º 28
0
void main()
{
 BiTree  T;
 CreateBiTree(T);
 printf("依次先序中序后序输出:\n");
 PreOrderTraverse(T,visit); printf("\n");
 InOrderTraverse(T,visit); printf("\n");
 PostOrderTraverse(T,visit); printf("\n");
 printf("树的深度为:%d\n",BiTreeDepth(T));
 printf("树的叶子节点数为:%d\n",Leaf(T));
 
}
Ejemplo n.º 29
0
 void main()
 {
   ALGraph g;
   CSTree t;
   printf("请选择无向图\n");
   CreateGraph(g); // 构造无向图g
   Display(g); // 输出无向图g
   DFSForest(g,t); // 建立无向图g的深度优先生成森林的孩子—兄弟链表t
   printf("先序遍历生成森林:\n");
   PreOrderTraverse(t,print); // 先序遍历生成森林的孩子—兄弟链表t
   printf("\n");
 }
Ejemplo n.º 30
0
 void main()
 {
   ALGraph g;
   CSTree t;
   printf("请选择无向图\n");
   CreateGraph(g);
   Display(g);
   DFSForest(g,t);
   printf("先序遍历生成森林:\n");
   PreOrderTraverse(t,print);
   printf("\n");
 }