java代码【问题描述】给定一棵二叉树的逻辑结构先序遍历的结果空树用字符‘0’表示例如AB0C00D00建立该二叉树的二叉链式存储结构求这棵二叉树的高度、叶子节点的个数。【输入形式】输入先序遍历的结果空树用字符‘0’表示例如AB0C00D00【输出形式】第一行输出该棵二叉树的高度第二行输出该棵二叉树叶子节点的个数。【样例输入】AB0C00D00【样例输出】32
import java.util.Scanner;
class TreeNode { char val; TreeNode left; TreeNode right;
TreeNode(char x) {
val = x;
}
}
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); TreeNode root = buildTree(str); int height = getHeight(root); int leafNum = getLeafNum(root); System.out.println(height); System.out.println(leafNum); }
// 先序遍历建树
private static TreeNode buildTree(String str) {
if (str == null || str.length() == 0) {
return null;
}
char ch = str.charAt(0);
if (ch == '0') {
return null;
}
TreeNode root = new TreeNode(ch);
root.left = buildTree(str.substring(1));
root.right = buildTree(str.substring(1));
return root;
}
// 获取二叉树的高度
private static int getHeight(TreeNode root) {
if (root == null) {
return 0;
}
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
return Math.max(leftHeight, rightHeight) + 1;
}
// 获取二叉树叶子节点的个数
private static int getLeafNum(TreeNode root) {
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
return 1;
}
return getLeafNum(root.left) + getLeafNum(root.right);
}
原文地址: https://www.cveoy.top/t/topic/fdPa 著作权归作者所有。请勿转载和采集!