赞
踩
首先来看看 java 生成二叉树
直接上代码
生成二叉树步骤
public class mergeTree {
public static class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int x){
val = x;
left = null;
right = null;
}
}
private static List<TreeNode> nodeList = null;
public static void main(String arg[]){
int[] arr = {1,2,3,4,5,6,7};
nodeList = new LinkedList<TreeNode>();
//先把 数组转换为 节点
for (int i=0;i<arr.length;i++){
nodeList.add(new TreeNode(arr[i]));
}
//然后 将 1 作为根节点 (构造最简单的完全二叉树)
// 最后一位 必须单独处理 因为可以有两种情况
// 这种方式 是一个二叉树一个二叉树的遍历
for(int i=0;i<arr.length/2 -1;i++){
nodeList.get(i).left = nodeList.get(i*2 + 1);
nodeList.get(i).right = nodeList.get(i*2 + 2);
}
//判断 节点个数是否为 奇数个
if(arr.length%2 ==1){
int i =arr.length /2 -1;
nodeList.get(i).left = nodeList.get(i*2 + 1);
nodeList.get(i).right = nodeList.get(i*2 + 2);
}else{
//判断 节点个数为 偶数个 该节点没有右子树
int i =arr.length /2 -1;
nodeList.get(i).left = nodeList.get(i*2 + 1);
}
//先按照先序 输出 生成的二叉树
preNode(nodeList.get(0));
System.out.println("\n");
//一道 关于 二叉树的 题
TreeNode d = mergeTree(nodeList.get(0),nodeList.get(1));
preNode(d);
}
/**
* 遍历两个二叉树 并相加对应节点的值 赋给t1二叉树
* @param t1
* @param t2
* @return
*/
public static TreeNode mergeTree(TreeNode t1 , TreeNode t2){
// 判断如果某一个对应节点为空 就返回另一个不为空的节点
if(t1 == null){
return t2;
}
if(t2 == null){
return t1;
}
t1.val +=t2.val;
t1.left = mergeTree(t1.left,t2.left);
t1.right = mergeTree(t1.right,t2.right);
return t1;
}
/**
* 先序遍历 二叉树
* @param treeNode
*/
public static void preNode(TreeNode treeNode){
if(treeNode == null){
return ;
}
System.out.print(treeNode.val +" ");
preNode(treeNode.left);
preNode(treeNode.right);
}
}
关于上图中生成完全二叉树 的 最后一个节点必须单独来判断 ,是因为有两种不同的情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。