每日编程-96期 最大二叉树
Posted 灰灰考研
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日编程-96期 最大二叉树相关的知识,希望对你有一定的参考价值。
今日问题:
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。
Example 1:
输入:[3,2,1,6,0,5]
输入:返回下面这棵树的根节点:
注意:
给定的数组的大小在 [1, 1000] 之间。
解决方法:
非递归:
1.从左至右依次扫描数组,建立新的树节点。
2.使用一个栈来维护一个递减序列(一部分结点而非所有)
3.遍历每个数字,如果栈非空或者它比栈顶数字大则将它入栈;如果最大的数(存在的话),则它一定在栈中,它是当前数字的根,而上一个出栈的数字(存在的话)是当前数字的左孩子(暂时的,可能改变),然后我们将当前数字入栈。
C++代码:
递归:
C代码:
Java代码:
明日题目预告:
另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
示例 1:
返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
示例 2:
返回 false。
以上是关于每日编程-96期 最大二叉树的主要内容,如果未能解决你的问题,请参考以下文章
每日编程-445期Leetcode.700. 二叉搜索树中的搜索