要求:输入一个list={1,2,3,4,5},输出树的结构如下。
代码如下:
首先创建一个树节点类。
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.left = null;
this.right = null;
this.val = val;
}
}
递归建立层次完全二叉树并输出层次遍历的结果。
public class BiTree {
public TreeNode buildTree(TreeNode root, int[] nums, int index) {
if (index >= nums.length) {
return null;
}
root = new TreeNode(nums[index]);
root.left = buildTree(root.left, nums, 2 * index + 1);
root.right = buildTree(root.right, nums, 2 * index + 2);
return root;
}
public void levelPrint(TreeNode root){
if(root == null)
{
return ;
}
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode current = null;
queue.offer(root);//将根节点入队
while(!queue.isEmpty())
{
current = queue.poll();//出队队头元素并访问
System.out.print(current.val+" ");
if(current.left != null)//如果当前节点的左节点不为空入队
{
queue.offer(current.left);
}
if(current.right != null)//如果当前节点的右节点不为空,把右节点入队
{
queue.offer(current.right);
}
}
}
public static void main(String[] args) {
int[] nums = { 1, 2, 3, 4, 5 };
BiTree tree = new BiTree();
TreeNode root = null;
root = tree.buildTree(root, nums, 0);
tree.levelPrint(root);
}
}
这里的关键点是什么呢。即在层次建立的完全二叉树中,左孩子的index(数组中的序号)是父节点的2倍,而右孩子的index是父节点的2倍加1。
输出结果: