[二叉树专题] 求二叉树中的节点个数(递归和迭代两种解法)

/* 递归解法O(n)
1. 若是二叉树为空,则节点个数为0;
2. 若是二叉树不为空,则二叉树节点数 = 左子树节点个数 + 右子树节点个数+ 1
*/
public static int getNodeNumRec(TreeNode root){
    if(root == null){//二叉树为null
        return 0;
    }else{//二叉树不为null
        return getNodeNumRec(root.left)+getNodeNumRec(root.right) + 1;
    }
}
/* 迭代解法 O(n)
基本思想同 LevelOrderTraversal,即用一个Queue,在Java里面能够用LinkedList来模拟
*/
public static int getNodeNum(TreeNode root){
    if(root == null){
        return 0;
    }
    int count = 1;
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.add(root);
    
    while(!queue.isEmpty()){
        TreeNode cur = queue.remove();
        if(cur.left != null){
            queue.add(cur.left);
            count++;
        }
        if(cur.right != null){
            queue.add(cur.right);
            count++;
        }
    }
    return count;
}
相关文章
相关标签/搜索