当前位置: 首页 > wzjs >正文

ps企业站网站做多大做网站有骗子

ps企业站网站做多大,做网站有骗子,代做毕网站,wordpress菜单分列654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…

654.最大二叉树

力扣题目地址(opens new window)

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

  • 二叉树的根是数组中的最大元素。
  • 左子树是通过数组中最大值左边部分构造出的最大二叉树。
  • 右子树是通过数组中最大值右边部分构造出的最大二叉树。

通过给定的数组构建最大二叉树,并且输出这个树的根节点。

示例 :

654.最大二叉树

提示:

给定的数组的大小在 [1, 1000] 之间。

 思路:

其实这个最大二叉树的定义和二叉搜索树非常像,我们能想到的是先找到里面最大的节点,将其放在根节点,然后去它的左子树里面寻找,接着去右子树里面寻找,属于前序遍历。

确定递归函数参数以及返回值

public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex)

我们根据传入的数组,和数组的起始结束节点来确定边界

确定终止条件

if (rightIndex - leftIndex < 1) {// 没有元素了return null;}if (rightIndex - leftIndex == 1) {// 只有一个元素return new TreeNode(nums[leftIndex]);}

当没有元素的时候直接退出,只有一个元素的时候直接return即可

确定单层递归的逻辑

        int maxIndex = leftIndex;// 最大值所在位置int maxVal = nums[maxIndex];// 最大值for (int i = leftIndex + 1; i < rightIndex; i++) {if (nums[i] > maxVal){maxVal = nums[i];maxIndex = i;}}TreeNode root = new TreeNode(maxVal);// 根据maxIndex划分左右子树root.left = constructMaximumBinaryTree1(nums, leftIndex, maxIndex);root.right = constructMaximumBinaryTree1(nums, maxIndex + 1, rightIndex);return root;

通过循环找到最大值,再通过递归左,右,最后return root即可

我们来看完整代码、

class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return constructMaximumBinaryTree1(nums, 0, nums.length);}public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) {if (rightIndex - leftIndex < 1) {// 没有元素了return null;}if (rightIndex - leftIndex == 1) {// 只有一个元素return new TreeNode(nums[leftIndex]);}int maxIndex = leftIndex;// 最大值所在位置int maxVal = nums[maxIndex];// 最大值for (int i = leftIndex + 1; i < rightIndex; i++) {if (nums[i] > maxVal){maxVal = nums[i];maxIndex = i;}}TreeNode root = new TreeNode(maxVal);// 根据maxIndex划分左右子树root.left = constructMaximumBinaryTree1(nums, leftIndex, maxIndex);root.right = constructMaximumBinaryTree1(nums, maxIndex + 1, rightIndex);return root;}
}

617.合并二叉树

力扣题目链接(opens new window)

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:

617.合并二叉树

注意: 合并必须从两个树的根节点开始。

思路:

这道题不难,我们只需要分别对两个数对应同一位置的节点进行比较,并且对节点进行处理就可以,采用那种遍历方式都行

确定递归方法及其参数

public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {

我们只需要两棵树的节点就行

确定终止条件

if (root1 == null) return root2;
if (root2 == null) return root1;

如果树枝的一部分为空,直接返回另一部分就行了

确定单层递归逻辑

        root1.val += root2.val;root1.left = mergeTrees(root1.left,root2.left);root1.right = mergeTrees(root1.right,root2.right);return root1;

将两个节点的值相加,然后递归左右节点即可

我们来看完整代码

class Solution {// 递归public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if (root1 == null) return root2;if (root2 == null) return root1;root1.val += root2.val;root1.left = mergeTrees(root1.left,root2.left);root1.right = mergeTrees(root1.right,root2.right);return root1;}
}

700.二叉搜索树中的搜索

力扣题目地址(opens new window)

给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。

例如,

700.二叉搜索树中的搜索

在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL。

思路:

我们找到了对应target值的节点之后进行返回操作即可,中间利用二叉搜索树的性质进行查找

确定递归函数及其参数

public TreeNode searchBST(TreeNode root, int val

传入节点和target值即可

确定终止条件

if (root == null || root.val == val) {return root;}

当根节点为空或者我们找到了对应值的节点的时候,我们直接返回就行

确定单层递归逻辑

if (val < root.val) {return searchBST(root.left, val);} else {return searchBST(root.right, val);}

如果root的值比target大,我们就从root的左子树去递归,反之亦然

我们来看完整代码

class Solution {// 递归,利用二叉搜索树特点,优化public TreeNode searchBST(TreeNode root, int val) {if (root == null || root.val == val) {return root;}if (val < root.val) {return searchBST(root.left, val);} else {return searchBST(root.right, val);}}
}

98.验证二叉搜索树

力扣题目链接(opens new window)

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

98.验证二叉搜索树

 思路 :二叉搜索树 左节点小于中间节点小于右节点,注意是所有左节点 下面这个情况是不符合的

不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了

写出了类似这样的代码:

if (root->val > root->left->val && root->val < root->right->val) {return true;
} else {return false;
}

 确定终止条件

if (root == NULL) return true;

递归到空节点,我们返回true,因为空节点也是二叉搜索树

确定单层递归逻辑

 boolean left = isValidBST(root.left);if (pre != null && pre.val >= root.val) return false;pre = root; // 记录前一个节点boolean right = isValidBST(root.right);return left && right;

左中右,中序遍历找到最左边,最小的节点值,然后一层一层返回去判断当前节点值是否大于pre,一旦有一个节点不满足,就会返回false 然后向上返回回去。

我们可以通过图示理解

    5/ \3   7/ \   \
1   4   8
isValidBST(5)
├── left = isValidBST(3)
│   ├── left = isValidBST(1)
│   │   ├── left = isValidBST(NULL) → true
│   │   ├── pre = NULL → 1
│   │   └── right = isValidBST(NULL) → true
│   │   └── 返回:true && true = true
│   ├── pre = 1 → 3
│   └── right = isValidBST(4)
│       ├── left = isValidBST(NULL) → true
│       ├── pre = 3 → 4
│       └── right = isValidBST(NULL) → true
│       └── 返回:true && true = true
│   └── 返回:true && true = true
├── pre = 4 → 5
└── right = isValidBST(7)├── left = isValidBST(NULL) → true├── pre = 5 → 7└── right = isValidBST(8)├── left = isValidBST(NULL) → true├── pre = 7 → 8└── right = isValidBST(NULL) → true└── 返回:true && true = true└── 返回:true && true = true
└── 返回:true && true = true

我们来看完整代码

class Solution {private TreeNode pre = null; // 用来记录前一个节点public boolean isValidBST(TreeNode root) {if (root == null) return true;boolean left = isValidBST(root.left);if (pre != null && pre.val >= root.val) return false;pre = root; // 记录前一个节点boolean right = isValidBST(root.right);return left && right;}
}

http://www.dtcms.com/wzjs/781017.html

相关文章:

  • 商城网站建设基础设计荣成市建设局网站是什么
  • 我要自学网首页网站建设广东东莞天气
  • 网站图标文件下载网站设计步骤有哪些
  • 企业电子商务网站开发网站建设目录
  • 顺企网官网电话苏州关键词优化公司
  • 大型网站开发php框架国外网站制作有哪些
  • 域名备案了 怎么建设网站增长超人网站建设价格
  • 企业网站咋做一个网站的建设需要哪些流程
  • 网站编辑面试问题和答案seo网站地图
  • 如何弄一个自己的网站广州越秀区美食攻略
  • 云南网站做的好的公司哪家好汤阴有没有做网站的公司
  • 网站工程是干啥的左右布局的网站
  • 山东省建设厅招标网站首页学习做网站大概多久时间
  • 高端设计网站公司公司网站文件夹设计
  • 重庆微网站开发公司教做衣服的网站有哪些
  • 揭阳网站免费建站清理空壳网站
  • 芜湖那里帮人做销售网站梧州网站建设制作
  • 温州企业网站建设公司wordpress无法超链接
  • 做o2o网站需要多少钱苏州城乡建设网站查询系统
  • 百合网网站建设与策划网店推广的渠道有哪些
  • 成交功能网站那个网站可以帮助做数学题
  • 投资建设个什么网站好WordPress怎么导入大数据库
  • 网易建站模板怎么在电脑上建立自己的网站
  • 优化网站建设做网站怎么挣钱最快
  • 中国山东网站建设辅助购卡网站怎么做
  • 南宁网站建设怎么样给外国小孩 做 英语题用的网站
  • 烟台网站制作开发北京制作网站公司排名
  • wordpress系统邮箱地址外贸网站优化
  • 网站制作公司费用营销网站的优势是什么意思
  • 服装网站首页设计服务企业建设网站