題意:一顆二叉樹,求 「 寬度 」
思路:遞迴,貌似這個思路是對的,先記下,但是提交時超時,
1.如果當前節點只有左孩子,那麼當前寬度等於左孩子寬度
2.如果當前節點只有右孩子,那麼當前寬度等於右孩子寬度
3.如果當前節點既有左孩子又有孩子
3.1兩個孩子寬度相等,則當前寬度等於其中乙個孩子寬度+1
3.2兩個孩子寬度不等,則當前寬度等於兩個孩子寬度中大的那乙個
**1:超時
#include#include#includeusing namespace std;**2:正確,**1的超時原因是,在遞迴過程中,遞迴運算太多了,多了不少重複的運算int tree[10010][2];
int sum;
int dfs(int i)
int main()
int ans=dfs(1);
printf("%d\n",ans);
} return 0;
}
但是,以下正確**更是蛋疼,有兩個變數不能定義為全域性變數,,,,啊啊啊啊啊,為啥啊,,,
#include#include#includeusing namespace std;int tree[10010][2];
//int lsum,rsum;
int dfs(int i)
}int main()
int ans=dfs(1);
printf("%d\n",ans);
} return 0;
}
ZOJ3805Machine 二叉樹左右子樹變換
1 2 題意 建立一棵二叉樹,左子樹和父節點佔乙個寬度,右子樹另外佔乙個寬度!3使任意左右子樹交換順序,使得整個樹的寬度最小!4思路 遞迴交換左右子樹 開始寫的 複雜了,其實左右子樹不用真的交換,只要返回交換與不交換最小的寬度值就好了,下次不用在查詢了!5 6 include7 include8 i...
Jzoj3805 小X的二叉堆計數
題意 給你n個不同的數問你能構成多少個不同的二叉堆 顯然不能列舉,我們考慮用遞推 我們令f i 表示以i為根的二叉堆有多少種 令l,r為i的左右兒子,令size i 為以i為根的堆的大小 那麼顯然,f i f l f r c size i 1,size l 因為n個數互不相同,所以沒有重複 相當於是...
zoj 1101 二分搜尋
感覺時間複雜度還是太高了,一開始自己寫了個二分搜尋。比stl裡的要慢個幾毫秒。可能是資料量太少了,體現不出來。if 1 include include include include using namespace std define my max 1001 long dight my max i...