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

北京大厂网站建设网站开发不满意

北京大厂网站建设,网站开发不满意,小说网站架构,wordpress 目录样式给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件&#…

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

  • 节点的左子树仅包含键 小于 节点键的节点。
  • 节点的右子树仅包含键 大于 节点键的节点。
  • 左右子树也必须是二叉搜索树。

注意:本题和 1038: . - 力扣(LeetCode) 相同

示例 1:

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

示例 3:

输入:root = [1,0,2]
输出:[3,3,2]

示例 4:

输入:root = [3,2,4,1]
输出:[7,9,4,10]

提示:

  • 树中的节点数介于 0 和 104 之间。
  • 每个节点的值介于 -104 和 104 之间。
  • 树中的所有值 互不相同 。
  • 给定的树为二叉搜索树。

思路

一看到累加树,相信很多小伙伴都会疑惑:如何累加?遇到一个节点,然后再遍历其他节点累加?怎么一想这么麻烦呢。

然后再发现这是一棵二叉搜索树,二叉搜索树啊,这是有序的啊。

那么有序的元素如何求累加呢?

其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。

为什么变成数组就是感觉简单了呢?

因为数组大家都知道怎么遍历啊,从后向前,挨个累加就完事了,这换成了二叉搜索树,看起来就别扭了一些是不是。

那么知道如何遍历这个二叉树,也就迎刃而解了,从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了

#递归

遍历顺序如图所示:

538.把二叉搜索树转换为累加树

本题依然需要一个pre指针记录当前遍历节点cur的前一个节点,这样才方便做累加。

pre指针的使用技巧,我们在二叉树:搜索树的最小绝对差 (opens new window)和二叉树:我的众数是多少? (opens new window)都提到了,这是常用的操作手段。

  • 递归函数参数以及返回值

这里很明确了,不需要递归函数的返回值做什么操作了,要遍历整棵树。

同时需要定义一个全局变量pre,用来保存cur节点的前一个节点的数值,定义为int型就可以了。

代码如下:

int pre = 0; // 记录前一个节点的数值
void traversal(TreeNode* cur)

  • 确定终止条件

遇空就终止。

if (cur == NULL) return;

  • 确定单层递归的逻辑

注意要右中左来遍历二叉树, 中节点的处理逻辑就是让cur的数值加上前一个节点的数值。

代码如下:

traversal(cur->right);  // 右
cur->val += pre;        // 中
pre = cur->val;
traversal(cur->left);   // 左

递归法整体代码如下:

class Solution {
private:int pre = 0; // 记录前一个节点的数值void traversal(TreeNode* cur) { // 右中左遍历if (cur == NULL) return;traversal(cur->right);cur->val += pre;pre = cur->val;traversal(cur->left);}
public:TreeNode* convertBST(TreeNode* root) {pre = 0;traversal(root);return root;}
};

#迭代法

迭代法其实就是中序模板题了,在二叉树:前中后序迭代法 (opens new window)和二叉树:前中后序统一方式迭代法 (opens new window)可以选一种自己习惯的写法。

这里我给出其中的一种,代码如下:

class Solution {
private:int pre; // 记录前一个节点的数值void traversal(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;while (cur != NULL || !st.empty()) {if (cur != NULL) {st.push(cur);cur = cur->right;   // 右} else {cur = st.top();     // 中st.pop();cur->val += pre;pre = cur->val;cur = cur->left;    // 左}}}
public:TreeNode* convertBST(TreeNode* root) {pre = 0;traversal(root);return root;}
};

#总结

经历了前面各种二叉树增删改查的洗礼之后,这道题目应该比较简单了。

好了,二叉树已经接近尾声了,接下来就是要对二叉树来一个大总结了

http://www.yayakq.cn/news/709046/

相关文章:

  • 公司做网站一般多少钱运营网站收录不好
  • 做视频网站要用到的服务器南阳logo设计公司
  • 关于征集网站建设素材的通知网站开发项目经理岗位职责
  • 做网站百度微信搜一搜seo优化
  • 花果园营销型网站建设秦皇岛市住房和城乡建设局网站
  • 网站策划是干什么的设计房子的软件电脑版
  • 三峡建设网站塘厦 网站建设 百度推广
  • 晋中北京网站建设陇南做网站
  • 做部队网站技术搜索引擎主要包括三个部分
  • 桂林网站建设设计深圳营销型网站建设服务
  • 贵阳网站建设服务公司wordpress如何设置伪静态
  • 上传文章的网站wordpress能做多大的站
  • 市体育局网站 两学一做WordPress三大标签插件
  • 做课件的软件下载带有蓝色的网站免费网站模板网
  • 现在什么省网站备案最快长沙做企业网站的公司
  • 网站运营seo实训总结网站后台登陆不进去
  • .net 网站开发陕建十四建公司简介
  • 哪些网站是做快消品的团员密码忘了
  • 计算机网站维护建设让php运行于wordpress
  • 哪个网站专题做的好巩义网站建设哪家专业
  • 17zwd一起做网站广州新塘检察院网站建设标书
  • 什么网站可以做微招聘网站制作过程内容
  • 泰安网站建设课程报告一般做网站都在什么网做
  • phpnow 新建网站温州房产信息网
  • 做网站没签合同开发公司不动产登记费入什么科目
  • 怎样建商业网站镇江网站优化哪家好
  • 贵州建设厅造价信息网站北京今天又出现一例
  • 类似58同城的网站怎么做懒懒淘客怎么做自己的网站
  • 网站页面布局名称太原做app网站建设
  • 成都企业模板建站微信小程序开发视频完整教程