前幾天學習完了tree的知識,發現了一道很有意思的題,給定乙個二叉樹,並且已知每個節點可以覆蓋它的左孩子,右孩子以及parent,求最少選擇幾個節點可以覆蓋整個二叉樹?
## 在寫**之前真的想到頭禿,試寫了大概3,4個版本吧,走後找到乙個比較簡單解法
思路:對於二叉樹的每乙個leaf而言,如果我們想要覆蓋他的話可以有兩種方法,第一種是覆蓋他本身,第二種是覆蓋他的parent,顯然覆蓋parent的話會有效率的多,因為還有一定的機率可以覆蓋到parent的parent,以及parent的另乙個孩子,然後我們可以把parent當作下一次覆蓋的leaf,直到全部覆蓋完成為止
#include #include /*
0: not covered
1: put a camera
2: covered
*/int res=0;
int main()
; int state;
scanf("%d", &n);
for(i = 0 ; i < n ; i++)
res = (dfs(a, m, 0) < 1 ? 1 : 0) + res;
printf("%d\n", res);
}return 0;
}int dfs(int a, int m, int current_idx)
int left = dfs(a, m, 2 * current_idx + 1);
int right = dfs(a, m, 2 * current_idx + 2);
if(left == 0 || right == 0)
return left == 1 || right == 1 ? 2 : 0;
}
完全二叉樹的節點個數
給出乙個完全二叉樹,求出該樹的節點個數。說明 完全二叉樹的定義如下 在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1 2h 個節點。示例 輸入 1 2 3 4 5 6 輸出 6 defini...
完全二叉樹的節點個數
222.完全二叉樹的節點個數 演算法 如果左子樹高度和右子樹高度相等,說明左子樹是滿二叉樹,節點個數為 如果左子樹高度和右子樹高度不相等,說明右子樹是滿二叉樹,節點個數為 如下 definition for a binary tree node.public class treenode class...
完全二叉樹子節點個數
題目 乙個具有n個節點的完全二叉樹,其葉子節點的個數為多少?分析 設葉子節點個數為n0,度為1的節點個數為n1,度為2的節點個數為n2 側有 n0 n1 n2 n 1 對於二叉樹有 n0 n2 1 2 由 1 2 n0 n 1 n1 2 3 由完全二叉樹的性質可知 n1 0 或 1總結 a 當n1 ...