二叉树题型框架

探寻排序的本质-二叉树的思想

快速排序就是二叉树的前序遍历归并排序就是个二叉树的后序遍历
快速排序的逻辑是,若是要对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);
}

算法实践

翻转二叉树

填充二叉树节点的右侧指针

将二叉树展开为链表

相关文章
相关标签/搜索