/*主函数*/
int main() {
	int n;
	int data;
	int key;
	BinaryTree btree = NULL;
	BinaryTree f = NULL, p = NULL;
	scanf("%d", &n);
	//btree = (BinaryTree)malloc(sizeof(BinaryTree)*n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &data);
		InsertBST(btree, data);
	}
	preOrder(btree, printNode);//前序遍历递归实现
	printf("\n");
	InOrder(btree, printNode);//中序遍历递归实现
	printf("\n");
	PostOrder(btree, printNode);//后序遍历递归实现
	printf("\n");
	scanf("%d", &key);
	printf("%d\n", SearchBST(btree, key, f, p));//查找操作
	scanf("%d", &key);
	printf("%d\n", SearchBST(btree, key, f, p));//查找操作
	scanf("%d", &data);
	InsertBST(btree, data);
	preOrder(btree, printNode);//前序遍历递归实现
	printf("\n");
	InOrder(btree, printNode);//中序遍历递归实现
	printf("\n");
	PostOrder(btree, printNode);//后序遍历递归实现
	printf("\n");
	InOrderSecond(btree);//中序遍历非递归实现
	LevelOrder(btree);//层次遍历
	return 0;
}
Ejemplo n.º 2
0
int main()
{
    BTreeNode *bt;
    char *b;
    ElemtType x,*px;
    InitBTree(&bt);
    b = "c(a(d,e),b)";
    CreateBTree(&bt, b);
    /*
    if (bt != NULL) {
        printf("%c", bt->data);
    }
     */
    printf("preorder\n");
    PreOrder(bt);printf("\n");
    printf("inorder\n");
    InOrder(bt);printf("\n");
    printf("postorder\n");
    PostOrder(bt);printf("\n");
    printf("levelorder\n");
    LevelOrder(bt);printf("\n");
    printf("find one root\n");
    scanf("%c",&x);
    px = FindBTree(bt, x);
    if (px) {
        printf("find it !: %c\n",*px);
    }
    else{
        printf("not find it\n");
    }
    printf("the depth of bt is \n");
    printf("%d\n",BTreeDepth(bt));
    ClearBTree(&bt);
    return 0;
}
int main(){
    struct BinaryTreeNode *root = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *second = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *third = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *fourth = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *fifth = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *sixth = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    struct BinaryTreeNode *seventh = (struct BinaryTreeNode *)malloc(sizeof(struct BinaryTreeNode));
    root->data = 1;
    root->left = second;
    root->right = third;
    second->data = 2;
    second->left = fourth;
    second->right = fifth;
    third->data = 3;
    third->left = sixth;
    third->right = seventh;
    fourth->data = 4;
    fourth->left = fourth->right = NULL;
    fifth->data = 5;
    fifth->left = fifth->right = NULL;
    sixth->data = 6;
    sixth->left = sixth->right = NULL;
    seventh->data = 7;
    seventh->left = seventh->right = NULL;
    
    LevelOrder(root);
    return 1;
}
Ejemplo n.º 4
0
void main()
{
	BTNode *b;
	CreateBTNode(b,"A(B(D(,G)),C(E,F))");
	printf("b:");DispBTNode(b);printf("\n");
	printf("层次遍历序列:");LevelOrder(b);printf("\n");
}
Ejemplo n.º 5
0
void main(void)
{
   // create a binary tree with root x
   BinaryTreeNode<int> x, y, z;
   x.data = 1;
   y.data = 2;
   z.data = 3;
   x.LeftChild = &y;
   x.RightChild = &z;
   y.LeftChild = y.RightChild = z.LeftChild = z.RightChild = 0;

   // traverse x in all ways
   cout << "Inorder sequence is ";
   InOrder(&x);
   cout << endl;
   cout << "Preorder sequence is ";
   PreOrder(&x);
   cout << endl;
   cout << "Postorder sequence is ";
   PostOrder(&x);
   cout << endl;
   cout << "Level order sequence is ";
   LevelOrder(&x);
   cout << endl;
}
Ejemplo n.º 6
0
void Test1(){
	int arr[] = {1,2,4,'#','#',7,'#','#',3,5,'#','#',6,'#',8};	
	Node_p root = CreateBinaryTree(arr,sizeof(arr)/sizeof(*arr),'#');
	cout<<"前序遍历:"<<endl;
	PrevOrder(root);
	PrevOrderNonR(root);
	cout<<endl;

	cout<<"中序遍历:"<<endl;
	InOrder(root);
	InOrderNonR(root);
	cout<<endl;
	
	cout<<"后序遍历:"<<endl;
	PostOrder(root);
	PostOrderNonR(root);
	cout<<endl;

	cout<<"层序遍历:"<<endl;
	LevelOrder(root);
	cout<<endl;
	int depth = Depth(root);
	cout<<"该树的高度为:"<<depth<<endl;
	cout<<"该树共有"<<LeafNum(root)<<"个叶子节点"<<endl;
	for(int i=1; i<=depth; ++i){
		cout<<"该树第"<<i<<"层有"<<GetKNode(root,i)<<"个节点"<<endl;
	}
	Node_p node1 = FindNode(root,4);
	Node_p node2 = FindNode(root,7);
	Node_p ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	node1 = FindNode(root,4);
	node2 = FindNode(root,5);
	ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	node1 = FindNode(root,5);
	node2 = FindNode(root,8);
	ancestor = GetCommonAncestor(root,node1,node2,1);
	cout<<node1->val<<"和"<<node2->val<<"的公共祖先为:"<<ancestor->val<<endl;
	
}
Ejemplo n.º 7
0
void main()
{
    BiTree t = NULL;

    //创建
    //createBitree1(&t);
    t = createBitree2();
    
    //先序
    preOrder(t);
    printf("\n");

    //树状打印
    printTree(t,1);
    printf("\n");

    //层次遍历
    LevelOrder(t);
    printf("\n");

}
Ejemplo n.º 8
0
void MinHblt<T>::LevelOrder(void (*theVisit) (HbltNode<T> *)) {
    Visit_ = theVisit;
    LevelOrder(root_);
}
Ejemplo n.º 9
0
void MinHblt<T>::LevelOrderOutput() {
    LevelOrder(Output); cout << endl;
}
Ejemplo n.º 10
0
void main()
{
	BiTree T;         //定义一个指向BiTNode结点的指针
	int choice;
	do{
	printf("\n");
	printf("请选择操作:\n");
	printf("1.按照先序的次序生成一颗二叉树\n");
	printf("2.递归算法实现二叉树的先序遍历,输出各结点值\n");
    printf("3.用非递归算法实现二叉树的遍历,输出各结点值\n");
	printf("4.求度分别为0、1、2的结点的数目(递归算法实现)\n");
	printf("5.求度分别为0、1、2的结点的数目(非递归算法实现)\n");
	printf("6.按层次遍历二叉树\n");
	printf("7.求二叉树的高度(深度)\n");
	printf("8.判断是否为完全二叉树,输出\"Yes!\"或\"No!\"\n");
	printf("9.交换每个结点的左右子树,并用先序遍历的方式输出\n");
	printf("10.对交换左右子树后的二叉树作中序遍历\n");
    printf("11.保存到文件\n");
	printf("12.从文件中读取并输出\n");
	printf("13.退出\n");
	scanf("%d",&choice);
	switch(choice){
	case 1:
		CreateBiTree(&T);   //创建二叉树
		break;
    case 2:
		PreOrderTraverse(T); //利用递归算法的先序遍历,输出结点值
		break;
	case 3:
		PreOrderTraverse2(T);//利用非递归算法的先序遍历,输出结点值
		break;
	case 4:
		get_node(T); //利用递归算法得到的各个结点的个数
		break;
	case 5:
		get_node_1(T);  //利用非递归算法得到的各个结点的个数
		break;
	case 6:
		LevelOrder(T);
		break;
	case 7:
		printf("二叉树的高度为%d\n",height(T));
		break;
	case 8:
		if(judge(T)==0)
			printf("No!\n");
		else
			printf("Yes!\n");
		break;
    case 9:
         exchange(T);
		 PreOrderTraverse(T);
		 break;
	case 10:
         InorderTraverse(T);
		 break;
	case 11:
		copy_TERM("d:\\aaa.dat",T);
		break;
	case 12:
		type("d:\\aaa.dat",T);
		break;
	}	
	}while(choice!=13);	
}