题目 思路 CB(S)T——对完全二叉树而言,如果树结点数已知,那么树结构就确定,即对每一个结点而言,其左树和右树个数可知;对二叉搜索树而言,小数在左,大数在右,故可由左右树包含结点个数,递归找根;根据二叉树的结构特点(每次递归可根据父结点位置得到子结点的位置),直接填充即可。level order traversal 核心代码 int getLeftTreeSize(int N)//已知树的结点数,计算其左树结点数 { int k,Nleft; int remainder; k=log10(N+1)/log10(2); //k为层数 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;//存储数据的CBT内位置 int n=right-left+1; if(n==0) return; else{ int L=getLeftTreeSize(n); TreeNode[root]=value[left+L];//value[]存储原始数据列,填充CBT树 leftroot=2*root+1;//二叉树规律(树数组从0开始) plantTree(left,left+L-1,leftroot); rightroot=leftroot+1; plantTree(left+L+1,right,rightroot); } } int main() { /*输入数据N个,存储在value[N]中*/ /*对value[N]进行从小到大的排序*/ plantTree(0,N-1,0); /*按数组顺序输出即为层序遍历*/ }