二叉树part06
LC654最大二叉树
- 跟昨天的思路类似,采用Arrays.copyOfRange(int[] origin,0,i)复制数组。但是不能忘记因为涉及递归,所以需要判断数组的长度是否为0,为0说明抵达了空节点,return null即可
- 代码
LC617合并二叉树(未掌握)
-
未掌握分析:想复杂了,认为不可以重复利用root2和root1,害怕导致地址乱套,但是其实不会
-
修改代码后问题变成如果你每次都创建新的节点,那么当某次root1的左存在而root2的左不存在,你创建新的节点将丢失root1左存在之后的所有信息
-
正确代码
LC700二叉搜索树中的搜索
- 确定递归终止条件
- root==null
- root是叶子节点且root.val!=val
- root.val==val
- 代码
LC98验证二叉搜索树(未掌握)
- 未掌握分析:受之前的解题思路的影响,之前的思路较为复杂,建议以后使用新思路
- 解题思路:
- 初始化一个最大值,记录当前判断过的子树中所有值的最大值
- 因为后台测试数据中有int最小值,所以定义为longlong的类型,初始化为longlong最小值
- 判断递归函数是否需要返回值:我们在寻找一个不符合条件的节点,如果没有找到这个节点就遍历了整个树,如果找到不符合的节点了,立刻返回。因此递归函数需要boolean类型的返回值
- 终止条件
- root==null
- 一旦发现maxVal >= root->val,就返回false
- 但是如果测试数据中有 longlong的最小值,上诉就不太行得通,因此讲初始化一个最大值改为初始化一个TreeNode记录前一个节点