从根节点到叶节点依次经过的节点(含根节点和叶节点)形成树的一条路径,最长路径的长度为树的深度。例如,如图二叉树的深度为3.
构建二叉树
二叉树的特性就是左节点,右节点,值,根节点。因此需要写根节点和左右子树的构造函数,用List存储所有的节点。
1.首先将第一个节点作为根节点。
2.其次将奇数位作为左子树,偶数位作为右子树
import java.util.ArrayList;
import java.util.List;
public class TreeNode {
public TreeNode left = null;//左节点
public TreeNode right = null;//右节点
public TreeNode root = null;//根节点
private Object val ;
private List<TreeNode> datas;//存储所有的节点
public TreeNode(TreeNode left,TreeNode right,Object val){
super();
this.left = left;
this.right = right;
this.val = val;
}
public TreeNode(Object val) {
this(null,null,val);
}
public TreeNode(){
super();
}
public void createTree(Object[] vals){
datas=new ArrayList<TreeNode>();
for (Object value : vals) {
datas.add(new TreeNode(value));
}
//将第一个作为根节点
root=datas.get(0);
//将奇数位作为左子树,偶数位作为右子树
for (int i = 0; i < vals.length/2; i++) {
datas.get(i).left=datas.get(i*2+1);
if(i*2+2<datas.size()){
datas.get(i).right=datas.get(i*2+2);
}
}
}
}
求解树的深度
树已经构建好,求解树的深度可以用到递归的方法。
import java.util.Scanner;
public class Tree {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
//输入一棵的二叉树,用逗号分隔
String datas = scanner.nextLine();
Object[] objs = datas.split(",");
TreeNode treeNode = new TreeNode();
treeNode.createTree(objs);
System.out.println(getTreeDepth(treeNode.root));
}
}
public static int getTreeDepth(TreeNode treeNode){
if(treeNode==null){
return 0;
}
int left = getTreeDepth(treeNode.left);
int right = getTreeDepth(treeNode.right);
return Math.max(left, right) + 1;
}
}