654.最大二叉树
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1h
思路:使用前序遍历实现这个树的构造,在数组中找到最大值,并切割为左右两边的子数组,并用这两个子数组分别构造最大二叉树。递归的返回值树节点指针,参数为节点指针和数组的左右范围,范围采用左闭右开。中止条件为当左边索引大于等于右边索引。递归逻辑为,找打当前范围内最大值的索引,用这个数构建子树根节点,在分割两边分别递归。
代码:
617.合并二叉树
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1h
思路:同时遍历两个树,当遍历到一个节点的时候,第一棵树的该位置节点不存在,第二棵树存在,则构造该位置节点时,用第二棵树的值。第一棵树该位置节点存在而第二棵不存在相反。如果两边都存在,则构造该节点的值为两边的和。
代码:
700.二叉搜索树中的搜索
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:0.5h
思路:递归的返回值用节点指针,方便找到等于给定值的节点时,返回该指针。终止条件是该节点值等于给定值或者进入空节点时。递归逻辑为大于给定值往右边走,小于往左边。
代码:
98.验证二叉搜索树
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1.5h
思路:该题应该使用中序遍历,这样遍历树之后出来的序列是左中右,而对二叉搜索树的中序遍历出来的序列应该是从小到大递进的。遍历时从最左边的节点开始,是最小的值,因此可以使用一个变量先放最小值,每次遍历到一个节点与其比较,大于则把当前节点值赋予该变量,如果小于该变量,说明中序遍历序列不是从小到大的,则不是二叉搜索树。
但是由于样例中包含int最小值,即INT_MIN,因此变量不能被赋予int最小值,可以是long long的最小值,不过如果样例中包含longlong最小值,又要找比它更小的值。因此,也可以用一个指针指向前一个遍历的节点来完成同样的效果,这样可以避免初始化最小值。
代码: