ZOJ 3805 Machine(二叉樹,遞迴)

2022-03-07 16:50:42 字數 798 閱讀 6024

題意:一顆二叉樹,求  「  寬度  」

思路:遞迴,貌似這個思路是對的,先記下,但是提交時超時,

1.如果當前節點只有左孩子,那麼當前寬度等於左孩子寬度

2.如果當前節點只有右孩子,那麼當前寬度等於右孩子寬度

3.如果當前節點既有左孩子又有孩子

3.1兩個孩子寬度相等,則當前寬度等於其中乙個孩子寬度+1

3.2兩個孩子寬度不等,則當前寬度等於兩個孩子寬度中大的那乙個

**1:超時

#include#include#includeusing namespace std;

int tree[10010][2];

int sum;

int dfs(int i)

int main()

int ans=dfs(1);

printf("%d\n",ans);

} return 0;

}

**2:正確,**1的超時原因是,在遞迴過程中,遞迴運算太多了,多了不少重複的運算

但是,以下正確**更是蛋疼,有兩個變數不能定義為全域性變數,,,,啊啊啊啊啊,為啥啊,,,

#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...