題目:統計完全二叉樹節點個數。
觀察完全二叉樹的結構發現主要有如下幾種:規律就是要麼根節點的左子樹為滿二叉樹,要麼根節點的右子樹為滿二叉樹。
思路: 首先,如果當前節點的右子樹最左邊那個節點和二叉樹的層數(深度)一樣則說明該節點的左子樹為滿二叉樹,如上圖左邊所示,的確根節點的右子樹的最左邊那個節點所在層數和二叉樹的層數是一樣的,那麼整顆二叉樹的節點個數就是左邊滿二叉樹的節點+當前節點(根節點)+遞迴右子樹節點個數。反之,當前節點的右子樹最左邊那個節點沒有到達二叉樹的層數(深度),則就是上圖右邊的情況:該節點的右子樹為一顆滿二叉樹。那麼整顆二叉樹的節點個數就是右邊滿二叉樹的節點+當前節點(根節點)+遞迴左子樹節點個數。實現**:
//接受兩個引數,節點指標和節點所在層數,最後返回最左側節點所在層數
int mostleftlevel(treenode* node, int level)
return level - 1;
}int nodenum(treenode* root)
int bs(treenode* node, int level, int h)
else
}
測試二叉樹為上圖四種情況,測試**如下:
#include#include#includeusing namespace std;
class treenode
};treenode* creattreenode()
return p;
}//接受兩個引數,節點指標和節點所在層數,最後返回最左側節點所在層數
int mostleftlevel(treenode* node, int level)
return level - 1;
}int bs(treenode* node, int level, int h)
else
}int nodenum(treenode* root)
int main()
}
測試結果:
完全二叉樹節點個數
關於作者 最簡單的解法就是遍歷這棵樹,時間複雜度是o n 如果只是這一種解法,就不會有本文了。本文中給出兩種解法。第一次看到完全二叉樹的定義比較懵,搜尋到的定義如下 設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數,第h層所有的結點都連續集中在最左邊,這就是完全二叉樹...
leetcode 完全二叉樹節點個數
給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。此題為求樹中節點個數,可以直接使用遞迴方法計算樹中遍歷樹中...
判斷完全二叉樹節點個數
節點 struct node 銷毀二叉樹 void destroy tree node root destroy tree root left destroy tree root right delete root 找到左子樹樹的總高度 intget left level node node,int...