怎么输出所有叶子结点。
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
public static void main(String[] args) {
Solution tree = new Solution();
TreeNode root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);
System.out.println("叶子节点总数:"+tree.getLeafCount(root));
}
}
class Solution {
public int getLeafCount(TreeNode root) {
if (root == null) {
return 0;
}
if (root.left == null && root.right == null) {
// 输出叶子节点
System.out.println("叶子节点:" + root.val);
return 1;
}
return getLeafCount(root.left) + getLeafCount(root.right);
}
}
遍历节点(bfs,dfs,前序后序中序),判断节点(叶子节点没有儿子,孤寡),输出节点
// 树结构
public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode() {
}
public TreeNode(int val) {
this.val = val;
}
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
// 测试树节点
TreeNode root = new TreeNode(
1,
new TreeNode(
2,
new TreeNode(
3,
new TreeNode(4),
null
)
, new TreeNode(5)
),
new TreeNode(
6,
new TreeNode(
7
),
new TreeNode(
8,
new TreeNode(9),
null
)
)
);
// 统计结点个数,并输出叶子结点
public int printLeaf(TreeNode node) {
int sum = 1;
if (node.left != null) {
sum += printLeaf(node.left);
}
if (node.right != null) {
sum += printLeaf(node.right);
}
if (sum == 1) {
System.out.println("叶子结点: " + node.val);
}
return sum;
}
输出示例:
树结构就最简单的一个值val,一个left节点,一个right节点。遍历用递归即可
public int dfs(TreeNode root) {
if (root == null) return 0;
// 叶子节点
if (root.left == null && root.right == null) {
System.out.println(root.val);
return 1;
}
// 返回总数
return dfs(root.left) + dfs(root.right);
}
叶子结点的意思是,这个结点没有子结点了。
所以你只需要先序遍历一下这颗树,当一个结点的左右孩子都是空的时候,那么就输出这个结点。