コード例 #1
0
ファイル: BinaryTree.c プロジェクト: fanqingsong/code-snippet
void PostOrderTraverse(BinaryTree * binaryTree,void(*visit)()){
	if(binaryTree){
		PostOrderTraverse(binaryTree->lChild,visit);
		PostOrderTraverse(binaryTree->rChild,visit);
		visit(Value(binaryTree,Root(binaryTree)));
	}
}
コード例 #2
0
ファイル: test.c プロジェクト: redspider110/study_doc
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");
}
コード例 #3
0
ファイル: tree.cpp プロジェクト: ichengit/DataStructure
/*后序遍历,采用递归*/
void PostOrderTraverse(BiTree T,void (visit)(BiTree)){
	if(T){
		PostOrderTraverse(T->lchild,visit);
		PostOrderTraverse(T->rchild,visit);
		visit(T);
	}
}
コード例 #4
0
void PostOrderTraverse(BiTree T)
{
    if (T == NULL) return;
    
    PostOrderTraverse(T->lchild);
    PostOrderTraverse(T->rchild);
    printf("%d\n", T->data);
}
コード例 #5
0
/// 后序遍历
void PostOrderTraverse(TreeNode* root)
{
	if(root == NULL)
		return;
	PostOrderTraverse(root->left);
	PostOrderTraverse(root->right);
	/// Visit(root);
}
コード例 #6
0
ファイル: ClueTree.cpp プロジェクト: geroge-gao/DataStructure
void PostOrderTraverse(BiThrTree btt)
{
	if(btt)
	{
		PostOrderTraverse(btt->lchild);
		PostOrderTraverse(btt->rchild);
		printf("%c",btt->data);
	}
}
コード例 #7
0
 void PostOrderTraverse(BiPTree T,Status(*Visit)(BiPTree))
 { /* 后序递归遍历二叉树T */
   if(T)
   {
     PostOrderTraverse(T->lchild,Visit); /* 后序遍历左子树 */
     PostOrderTraverse(T->rchild,Visit); /* 后序遍历右子树 */
     Visit(T); /* 最后访问根结点 */
   }
 }
コード例 #8
0
Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) )//后序遍历二叉树
 {
    if(T==NULL)  return 0;
    PostOrderTraverse(T->lchild,Visit);
    PostOrderTraverse(T->rchild,Visit);
    Visit(T->data);
    return 1;

} // PostOrderTraverse
コード例 #9
0
ファイル: tree.c プロジェクト: andyCandy/datastruct
void PostOrderTraverse(BitTree t){
	if(!t)
		return;

	PostOrderTraverse(t->lchild);
	PostOrderTraverse(t->rchild);
	printf("%c",t->data);


}
コード例 #10
0
//后序递归遍历
int PostOrderTraverse(BiTree T)
{
    if(T!=NULL)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        printf("%c",T->data);
    }
    return true;
}
コード例 #11
0
Status PostOrderTraverse(BiTree T,Status (* visit)(TElemType e))
{         //递归后序遍历
 if(T)
 {
  PostOrderTraverse(T->lchild,visit);
  PostOrderTraverse(T->rchild,visit);
  visit(T->data);
 }
 return OK;
}
コード例 #12
0
ファイル: bo6-2.c プロジェクト: CNmatumbaman/Data-Structure-1
 void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType))
 { /* 初始条件: 二叉树T存在,Visit是对结点操作的应用函数 */
   /* 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次 */
   if(T) /* T不空 */
   {
     PostOrderTraverse(T->lchild,Visit); /* 先后序遍历左子树 */
     PostOrderTraverse(T->rchild,Visit); /* 再后序遍历右子树 */
     Visit(T->data); /* 最后访问根结点 */
   }
 }
コード例 #13
0
ファイル: bo6-2.CPP プロジェクト: wuzongbin2008/c_test
 void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType))
 { // 初始条件: 二叉树T存在,Visit是对结点操作的应用函数
   // 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次
   if(T) // T不空
   {
     PostOrderTraverse(T->lchild,Visit); // 先后序遍历左子树
     PostOrderTraverse(T->rchild,Visit); // 再后序遍历右子树
     Visit(T->data); // 最后访问根结点
   }
 }
コード例 #14
0
ファイル: e25.cpp プロジェクト: cqiyi/kaoshi
//后序遍历
Status PostOrderTraverse(BiTree T)
{
	if(T)
	{
		PostOrderTraverse(T->lchild);
		PostOrderTraverse(T->rchild);
		printf("%c",T->data);
	}
	return OK;
}
コード例 #15
0
ファイル: bitree.c プロジェクト: schwxd/linux-kernel
/* 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次 */
void PostOrderTraverse(BiTree T, Status(* Visit)(TElemType))
{
	if (T) {
		if (T->lchild)
			PostOrderTraverse(T->lchild, Visit);
		if (T->rchild)
			PostOrderTraverse(T->rchild, Visit);
		Visit(T->data);
	}	
}
コード例 #16
0
/*后序遍历二叉树*/
void PostOrderTraverse(BiTree T)
{
	if(!T)
		return;
	else
	{		
		PostOrderTraverse(T->lchild);
		PostOrderTraverse(T->rchild);
		printf("%c",T->data);	
	}
}
コード例 #17
0
ファイル: BiTree.cpp プロジェクト: zhangzewen/Algorithms
void PostOrderTraverse(BiTree T)
{
	BiTree p = NULL;
	p = T;
	if (p != NULL) {
		PostOrderTraverse(p->lchild);
		PostOrderTraverse(p->rchild);
		printf("%4c",p->data);
	}

}
コード例 #18
0
ファイル: BinaryTree.cpp プロジェクト: yannxin/Tree
void PostOrderTraverse(BSTree BST)
{
	if (BST)
	{
		PostOrderTraverse(BST->left);
		PostOrderTraverse(BST->right);
		int i;
		for (i = 0; i < BST->count; i++)
		{
			printf("%d ", BST->value);
		}
	}
}
コード例 #19
0
ファイル: BinaryTree.cpp プロジェクト: FangXiaobao/-
status PostOrderTraverse(Node* T)          //后序遍历算法
{
    if(T == NULL)
    {
        return TRUE;
    }

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

    return TRUE;
}
コード例 #20
0
Status PostOrderTraverse( BiTree T)
{
     // 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。
     //补全代码,可用多个语句
   if(T)
   {
        if(PostOrderTraverse(T->lchild))
          if(PostOrderTraverse(T->rchild))
            if(PrintElement(T->data))
       return OK;
       return ERROR;
   }else return OK;

} // PostOrderTraverse
コード例 #21
0
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
コード例 #22
0
ファイル: main.c プロジェクト: zhangzewen/Algorithms
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;
}
コード例 #23
0
ファイル: BinaryTreeTest.cpp プロジェクト: yannxin/Tree
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(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;
}
コード例 #25
0
void PostOrderTraverse(CSTree T, void (*Visit)(TElemType))
{
	CSTree p;

	if (T) {
		if (T->firstchild) {
			PostOrderTraverse(T->firstchild, Visit);
			p = T->firstchild->nextsibling;
			while (p) {
				PostOrderTraverse(p, Visit);
				p = p->nextsibling;
			}
		}
		Visit(Value(T));
	}
}
コード例 #26
0
void BiTree_Test()
{
    BiTree T = (BiTree)malloc(sizeof(BiTNode));
    T->data = 10;
    
    BiTNode* c1 = (BiTNode *)malloc(sizeof(BiTNode));
    c1->data = 5;
    T->lchild = c1;
    
    BiTNode* c2 = (BiTNode *)malloc(sizeof(BiTNode));
    c2->data = 7;
    c1->rchild = c2;
    
    BiTNode* c3 = (BiTNode *)malloc(sizeof(BiTNode));
    c3->data = 3;
    c1->lchild = c3;
    
    BiTNode* c4 = (BiTNode *)malloc(sizeof(BiTNode));
    c4->data = 15;
    T->rchild = c4;
    
//    PreOrderTraverse(T);
//    InOrderTraverse(T);
    PostOrderTraverse(T);
}
コード例 #27
0
ファイル: tree.c プロジェクト: andyCandy/datastruct
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");

}
コード例 #28
0
ファイル: main.c プロジェクト: Cxd2014/DataStruct
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;
}
コード例 #29
0
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;
}
コード例 #30
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;
}