二叉樹題型框架

探尋排序的本質-二叉樹的思想

快速排序就是二叉樹的前序遍歷歸併排序就是個二叉樹的後序遍歷
快速排序的邏輯是,若是要對nums[lo...hi]進行排序,咱們先找一個分界點p,經過交換元素使得nums[lo...p-1]都小於等於nums[p],且nums[p+1...hi]都大於nums[p],而後遞歸地去nums[lo...p-1]和nums[p+1...hi]中尋找新的分界點,最後整個數組就被排序了。
快速排序的代碼框架以下算法

void sort(int[] nums,int lo,int hi){
//前序遍歷位置
//經過交換元素構建分界點p
int p=partition(nums,lo,hi);
sort(nums,lo,p-1);
sort(nums,p+1,hi);
}

歸併排序的代碼框架以下數組

void sort(int[] nums,int lo,int hi){
int mid=(lo+hi)/2;
sort(nums,lo,mid);
sort(nums,mid+1,hi);

//後序遍歷位置
//合併兩個排好序的子數組
merge(nums,lo,mid,hi);
}

遞歸永遠是咱們的好幫手

寫遞歸算法的關鍵是要明確函數的 定義 是什麼,而後相信這個定義,利用這個定義推導出最終的結果,毫不要跳入遞歸的細節。框架

//定義:count(root)返回以root爲根的樹有多少節點
int count(TreeNode root){
//base case
if(root==null){
return 0;
}

return 1+count(root.left)+count(root.right);
}

算法實踐

翻轉二叉樹

填充二叉樹節點的右側指針

將二叉樹展開爲鏈表

相關文章
相關標籤/搜索