二叉樹mirros遍歷和陣列劃分為k等份

2021-09-19 08:59:28 字數 1495 閱讀 1342

1、二叉樹mirros遍歷,原理類似於線索樹,利用空餘指標來儲存其後續節點。

void recovertree(struct treenode* root) 

struct treenode *p1 = root;

struct treenode *p2 = null;

while (p1 != null)

if (p2->right == null)

else

}printf("%d ",p1->val);

p1 = p1->right;

}}

類似於線索樹。

2、陣列劃分為4等份例子。

還記得童話《賣火柴的小女孩》嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。

輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。

示例 1:

輸入:[1,1,2,2,2]輸出:true解釋:能拼成乙個邊長為2的正方形,每邊兩根火柴。
示例 2:

輸入:[3,3,3,3,4]輸出:false解釋:不能用所有火柴拼成乙個正方形。
dfs深搜,判斷滿足條件的情況。考慮可能的所有情況,即將n個數放在4個盒子裡,總共有4的n次方種可能。考慮題目,我們捨去一部分,比如四條邊只要一條不滿足就捨去。

class solution 

}return false;

}};

上邊**的搜尋過程進行了剪枝,if(tmp+nums[i] > side) break;

class solution 

if(sum/4*4!=sum) return false;

return dfs(nums,0,nums.length,0,0,0,0,sum/4);

}private boolean dfs(int nums, int i, int length, int i1, int i2, int i3, int i4, int i5)

if(i1>i5 || i2>i5 || i3>i5 || i4>i5 ) return false;

return dfs(nums,i+1,length,i1+nums[i],i2,i3,i4,i5)||

dfs(nums,i+1,length,i1,i2+nums[i],i3,i4,i5)||

dfs(nums,i+1,length,i1,i2,i3+nums[i],i4,i5)||

dfs(nums,i+1,length,i1,i2,i3,i4+nums[i],i5);

}}

二叉樹陣列儲存 前序遍歷 列印二叉樹

include stdafx.h include define size 20 求深度 完全二叉樹的最大節點數量s 2 n 1,n 樹的高度 對於乙個陣列結構的tree,要先求tree的深度n,求最大指數2 n 1 size 2 n size 1 所以 n log2 size 1 n向上取整 int...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...