Esempio n. 1
0
 Node* BinaryTree::createBTree(int sortedArray[], int start, int end)
{
    Node* currentNode = new Node;
    currentNode->data = getMedian(sortedArray, end+1);
    currentNode->left = createBTree(sortedArray, 0,end/2 -1);
    currentNode->right = createBTree(sortedArray, end/2 + 1 , end);
    return currentNode;
}
Esempio n. 2
0
BinaryTree::BinaryTree(int sortedArray[], int length)
{
    root = new Node();
    root->data = getMedian(sortedArray,length);
    root->left = NULL;
    root->right = NULL;
 
    Node* currentNode = root;
    
    currentNode->left = createBTree(sortedArray,0,length/2 -1);
    currentNode->right = createBTree(sortedArray, length/2 +1, length-1);
    
}
Esempio n. 3
0
//先序创建二叉树
struct btree *createBTree(void)
{
	char ch=getchar();
	if(ch=='#'){
		return NULL;
	}
	else{
		struct 	my_btree *node=(struct my_btree *)malloc(sizeof(struct my_btree));
		node->data=ch;
		(node->root).lchild=createBTree();
		(node->root).rchild=createBTree();
		return &(node->root);
	}
}
Esempio n. 4
0
void BTree::createBTree(BTNode *&pRoot)
{
	char data;
	cin >> data;
	if(data == '#' )
		pRoot = NULL;
	else
	{
		pRoot = new BTNode;
		if(pRoot == NULL)
			return;
		pRoot->val = data;
		createBTree(pRoot->pLeft);
		createBTree(pRoot->pRight);
	}
}
Esempio n. 5
0
/*
根据给定的递增数组递归创建高度最小的二叉树,
因为要修改指向根节点的指针的指向,因此要传入pTree的指针,即BTNode的二级指针
*/
void createBTree(BTree *ppTree,int *A,int start,int end)
{
	if(start <= end)
	{
		int mid = (start + end)/2;
		*ppTree = (BTree)malloc(sizeof(BTNode));
		if(*ppTree == NULL)
		{
			printf("malloc faild");
			exit(EXIT_FAILURE);
		}
		(*ppTree)->data = A[mid];
		(*ppTree)->pLchild = NULL;
		(*ppTree)->pRchild = NULL;
		createBTree(&(*ppTree)->pLchild,A,start,mid-1);
		createBTree(&(*ppTree)->pRchild,A,mid+1,end);
	}
}
Esempio n. 6
0
int main(void)
{
	printf("following is the test of binary tree:\n");
	while(1){
		struct btree *ptr_root=malloc(sizeof(struct btree));
		init_btree(ptr_root);
		printf("\nplease input binary tree in pre-order:\n");
		ptr_root=createBTree();	
		
		printf("\n\nprint btree in pre-order:\n");
		preOrder(ptr_root);
		
		printf("\n\nprint btree in mid-order:\n");
		midOrder(ptr_root);
		
		printf("\n\nprint btree in post-order:\n");
		postOrder(ptr_root);

		printf("\n\nthis btree's nodes' amount: \n%d",countAllNodes(ptr_root));		
		
		printf("\n\nthis btree's height: \n%d",getHeight(ptr_root));

		printf("\n\nthis btree's leaf's amount:\n%d",countLeaf(ptr_root));
				
		printf("\n\nprint btree's leaf:\n");
		displayLeaf(ptr_root);
		
		printf("\n\nfind 'a' and insert 'x' in left,then display all node in pre-oreder:\n");
		struct btree *foundRoot=searchNode(ptr_root,'a');
		insertLeftNode(foundRoot,'x');
		preOrder(ptr_root);

		printf("\n\nfind 'a' and insert 'y' in left,then display all node in pre-oreder:\n");
		foundRoot=searchNode(ptr_root,'a');
		insertRightNode(foundRoot,'y');
		preOrder(ptr_root);


		printf("\n\ndelete leftTree and display left node in pre-order:\n");
		deleteLeftTree(ptr_root);
		preOrder(ptr_root);

		printf ("\n\ndelete rightTree and display left node in pre-order:\n");
		deleteRightTree(ptr_root);
		preOrder(ptr_root);

		printf("\n\nclear btree!\n");
		clearBTree(ptr_root);
		//clear input buffer
		char ch;
		while((ch=getchar())!='\n'&&ch!=EOF);
	}

	return 0;
}
Esempio n. 7
0
int main()
{
	int A[] = {0,1,2,3,4,5,6,7};
	int len = 8;
	BTree pTree;
	createBTree(&pTree,A,0,len-1);
	printf("the height of this tree is %d\n",height(pTree));
	printf("中序遍历后的结果为:\n");
	in_traverse(pTree);
	printf("\n");
	return 0;
}
Esempio n. 8
0
void testTree(void)
{
	BTree tree = NULL;
	createBTree(tree); // 先序递归建立二叉树(0表示空),输入1 2 4 0 0 5 0 0 3 6 0 0 7 0 0 
	/*
	                      1
						/   \
					   2     3
	                  /  \  /  \
	                 4    5 6   7
	*/

	std::cout << "preOrder Recursion Traverse BTree: " << std::endl;
	preorderTraverseByRecursion(tree);

	std::cout << "preOrder No Recursion  Traverse BTree: " << std::endl;
	preorderTraverseByNoRecursion(tree);

	std::cout << "inOrder Recursion Traverse BTree: " << std::endl;
	inorderTraverseByRecursion(tree);

	std::cout << "inOrder No Recursion Traverse BTree: " << std::endl;
	inorderTraverseByNoRecursion(tree);

	std::cout << "postOrder Recursion Traverse BTree: " << std::endl;
	postorderTraverseByRecursion(tree);

	std::cout << "postOrder No Recursion Traverse BTree: " << std::endl;
	postorderTraverseByNoRecursion(tree);

	std::cout << "levelOrder Traverse BTree: " << std::endl;
	levelorderTraverse(tree);

	std::cout << "BTree Depths is: " << getBTreeDepth(tree) << std::endl;
	std::cout << "BTree Node Number is: " << getBTreeNodeNumber(tree) << std::endl;

	destoryBTree(tree);
}