[二叉樹專題] 求二叉樹中的節點個數(遞歸和迭代兩種解法)

/* 遞歸解法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;
}
相關文章
相關標籤/搜索