求二又树的叶子结点的个数,并打印输出所有叶子结点.

怎么输出所有叶子结点。

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;
}

输出示例:

img

树结构就最简单的一个值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);
    }

叶子结点的意思是,这个结点没有子结点了。
所以你只需要先序遍历一下这颗树,当一个结点的左右孩子都是空的时候,那么就输出这个结点。