求二叉树叶子节点的个数
tag: 二叉树
思路:
(1)通过先序遍历的方式求解
(2)叶子节点的特点: 左右孩子都为空
也可以用递归方式
package com.zhaochao.tree; import java.util.Stack; /** * Created by zhaochao on 17/1/23. * 叶子结点的特点: 左右孩子都为空 * 通过先序的方式找到叶子结点 * */ public class LeafNumber { int flag = 0; public int getCountsOfLeaves(TreeNode root) { int count = 0; if(root == null) { return count; } Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()) { TreeNode node = stack.pop(); if(node.left == null && node.right == null) { count++; } if(node.right != null) { stack.push(node.right); } if(node.left != null) { stack.push(node.left); } } return count; } //递归求解 public void getCountRec(TreeNode root) { if(root == null) { return; } if(root.left == null && root.right == null) { flag++; } getCountRec(root.left); getCountRec(root.right); } public static void main(String[] args) { TreeNode root = new TreeNode(0); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); root.left = node1; root.right = node2; node2.left = node3; node2.right = node4; LeafNumber test = new LeafNumber(); int count = 0; count = test.getCountsOfLeaves(root); System.out.println("The number of nodes in the tree is " + count); test.getCountRec(root); System.out.println("Recursion : the number of nodes in the tree is " + test.flag); } }