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; }
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); }
//先序创建二叉树 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); } }
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); } }
/* 根据给定的递增数组递归创建高度最小的二叉树, 因为要修改指向根节点的指针的指向,因此要传入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); } }
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; }
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; }
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); }