654.最大二叉树
思路:
使用前序遍历,先构造中间节点
递归三部曲:
1.确定递归函数的参数和返回值
参数传入的是存放元素的数组,返回该数组构造的二叉树的头结点
2.确定终止条件
当递归遍历的时候,如果传入的数组大小为1,说明遍历到了叶子节点
3.确定单层递归的逻辑
找到数组中最大的值和对应的下标, 最大的值构造根节点,下标用来下一步分割数组
最大值所在的下标左区间 构造左子树
最大值所在的下标右区间 构造右子树
617.合并二叉树
思路:同级操作,前中后都可以
递归三部曲:
1.确定递归函数的参数和返回值
要合入两个二叉树,那么参数至少是要传入两个二叉树的根节点,返回值就是合并之后二叉树的根节点
2.确定终止条件
如果t1 == NULL 了,两个树合并就应该是 t2
如果t2 == NULL,那么两个数合并就是t1
3.确定单层递归的逻辑
把两棵树的元素加到一起
t1->val+=t2->val;// 中
t1->left=mergeTrees(t1->left,t2->left);// 左
t1->right=mergeTrees(t1->right,t2->right);// 右
700.二叉搜索树中的搜索
递归三部曲:
1.确定递归函数的参数和返回值
参数传入的就是根节点和要搜索的数值,返回的就是以这个搜索数值所在的节点
2.确定终止条件
if(root==NULL||root->val==val) returnroot;
3.确定单层递归的逻辑
二叉搜索树的节点是有序的,可以有方向的去搜索
98.验证二叉搜索树
递归中序遍历将二叉搜索树转变成一个数组,只要比较一下,这个数组是否是有序的,注意二叉搜索树中不能有重复元素