题目

思路
- CB(S)T——对完全二叉树而言,如果树结点数已知,那么树结构就确定,即对每一个结点而言,其左树和右树个数可知;对二叉搜索树而言,小数在左,大数在右,故可由左右树包含结点个数,递归找根;根据二叉树的结构特点(每次递归可根据父结点位置得到子结点的位置),直接填充即可。
- level order traversal
核心代码
int getLeftTreeSize(int N)
{
int k,Nleft;
int remainder;
k=log10(N+1)/log10(2);
remainder=N-(pow(2,k)-1);
if(remainder<=pow(2,k-1))
Nleft=remainder+pow(2,k-1)-1;
else Nleft=pow(2,k)-1;
return Nleft;
}
void plantTree(int left,int right,int root)
{
int leftroot,rightroot;
int n=right-left+1;
if(n==0)
return;
else{
int L=getLeftTreeSize(n);
TreeNode[root]=value[left+L];
leftroot=2*root+1;
plantTree(left,left+L-1,leftroot);
rightroot=leftroot+1;
plantTree(left+L+1,right,rightroot); }
}
int main()
{
plantTree(0,N-1,0);
}