题目
怎样编写一个程序,把一个有序整数数组放到二叉树中?
解析
这里都说这个数组是有序了,想想二叉树中对应有序相关的,就是二叉搜索树了。
二叉搜索树的根节点大于左侧的值,同时又小于右侧的值,那这样正好取数组的中间值作为根节点
然后将两侧分别递归作为左右子节点即可。
这种方式建树的另一个好处就是将树还原成数组很方便:直接使用中序遍历或者用不开辟空间的方法
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| /** * 使用递归构建二叉树即可 * 这样左侧节点小于根节点,右侧节点大于根节点 * 对应数组正好是中间的值以及两侧的值 * @param a * @param left * @param right * @return */ public static TreeNode putArrayToTree(int[] a,int left,int right) { if(left>right) return null; int m=left+(right-left)/2; TreeNode root=new TreeNode(a[m]); root.left=putArrayToTree(a,left,m-1); root.right=putArrayToTree(a,m+1,right); return root; }
/** * 树的结构 * @author yanyl * */ static class TreeNode{ public int data; public TreeNode left,right; public TreeNode(int data) { this.data=data; } }
|
参考
本作品采用[知识共享署名-非商业性使用-相同方式共享 2.5]中国大陆许可协议进行许可,我的博客欢迎复制共享,但在同时,希望保留我的署名权