zoukankan      html  css  js  c++  java
  • 【CareerCup】Trees and Graphs—Q4.3

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/24744177


        题目:

        Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height.

        翻译:

        给定一个有序数组(递增),敲代码构建一棵具有最小高度的二叉树。

        思路:

        要使二叉树的高度最小,则要尽量使其左右子树的节点数目相当,自然就考虑到将其构造成为二叉排序树,且将有序数组的中间大的数作为根节点,这样得到的二叉树的高度便是最小的。

        实现代码:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct BTNode
    {
    	int data;
    	struct BTNode *pLchild;
    	struct BTNode *pRchild;
    }BTNode, *BTree;
    
    /*
    依据给定的递增数组递归创建高度最小的二叉树,
    由于要改动指向根节点的指针的指向,因此要传入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 max(int a,int b)
    {
    	return a>b?

    a:b; } /* 求二叉树的深度 */ int height(BTree pTree) { if(pTree == NULL) return 0; else return max(height(pTree->pLchild),height(pTree->pRchild)) + 1; } /* 中序遍历的递归实现 */ void in_traverse(BTree pTree) { if(pTree) { if(pTree->pLchild) in_traverse(pTree->pLchild); printf("%d ",pTree->data); if(pTree->pRchild) in_traverse(pTree->pRchild); } } 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 ",height(pTree)); printf("中序遍历后的结果为: "); in_traverse(pTree); printf(" "); return 0; }


        測试结果:


        注:代码开源到Github:https://github.com/mmc-maodun/CareerCup


  • 相关阅读:
    LUA表的引用理解
    UNITY 打包安卓APK
    UNITY打包问题
    U3D 打包时找不到tag的问题
    break prefab instance的原理
    C#调用LUA函数
    LUA 利用#遍历表的问题
    U3D笔记11:47 2016/11/30-15:15 2016/12/19
    Unity3D 预设打包的注意事项
    回调 和 覆盖
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7095448.html
Copyright © 2011-2022 走看看