LeetCode897. 递增顺序查找树
题目
法一、自己
1 class Solution {
2 public:
3 vector<int>res;
4 TreeNode* increasingBST(TreeNode* root) {
5 dfs(root);
6 TreeNode* p = new TreeNode(0);
7 TreeNode *cur = p;
8 for(int i =0;i <res.size();i++){
9 cur->val = res[i];
10 //cur->right = new TreeNode(res[i]);
11 if(i == res.size()-1) break;
12 cur->right = new TreeNode();
13 cur = cur->right;
14 }
15 return p;
16 }
17 void dfs(TreeNode* root){
18 if(root!=NULL){
19 dfs(root->left);
20 res.push_back(root->val);
21 dfs(root->right);
22 }
23 }
24 };
没有一次bug free直接A掉的原因是又忘记自己经常犯得一个错误,经常空指针赋值。
第一次写,9-13行为 cur->val = res[i]; cur = cur->right;这样在循环里更新后的cur可能为空。
所以先要创建一个右节点然后更新指针。并且最后一次不需要创建右节点,所以在最后一次
循环控制。
法二、类似链表中的创造哑节点的思想,就是创建一个头节点,之后并不是对访问结点更新,
而是对它的右节点更新
1 class Solution {
2 public:
3 vector<int>res;
4 TreeNode* increasingBST(TreeNode* root) {
5 dfs(root);
6 TreeNode* p = new TreeNode(0);
7 TreeNode *cur = p;
8 for(int i =0;i <res.size();i++){
9 cur->right = new TreeNode(res[i]);
10 cur = cur->right;
11 }
12 return p->right;
13 }
14 void dfs(TreeNode* root){
15 if(root!=NULL){
16 dfs(root->left);
17 res.push_back(root->val);
18 dfs(root->right);
19 }
20 }
21 };
一定要学习这种做法
LeetCode897. 递增顺序查找树的更多相关文章
- [Swift]LeetCode897. 递增顺序查找树 | Increasing Order Search Tree
Given a tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root o ...
- LeetCode 897. 递增顺序查找树(Increasing Order Search Tree)
897. 递增顺序查找树 897. Increasing Order Search Tree 题目描述 给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有 ...
- [LeetCode] 897. Increasing Order Search Tree 递增顺序查找树
Given a tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root o ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...
- 查找算法(I) 顺序查找 二分查找 索引查找
查找 本文为查找算法的第一部分内容,包括了基本概念,顺序查找.二分查找和索引查找.关于散列表和B树查找的内容,待有空更新吧. 基本概念 查找(search)又称检索,在计算机上对数据表进行查找,就是根 ...
- lintcode-86-二叉查找树迭代器
86-二叉查找树迭代器 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 样例 对于下列 ...
- 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种 ...
- 转 浅谈算法和数据结构: 十 平衡查找树之B树
前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tre ...
- java实现二叉树查找树
二叉树(binary)是一种特殊的树.二叉树的每个节点最多只能有2个子节点: 二叉树 由于二叉树的子节点数目确定,所以可以直接采用上图方式在内存中实现.每个节点有一个左子节点(left childre ...
随机推荐
- 腾讯游戏 K8s 应用实践|更贴近业务场景的 K8s 工作负载:GameDeployment & GameStatefulSet
引言 蓝鲸容器服务(Blueking Container Service,以下简称BCS)是腾讯 IEG 互动娱乐事业群的容器上云平台,底层基于腾讯云容器服务(Tencent Kubernetes E ...
- 性能测试工具 jmeter 分布式压力测试实操
性能测试工具 jmeter 分布式压力测试实操 本文在Non-GUI Mode下进行,准备好三台有jdk环境,linux操作系统,同一局域网测试机器,运行两台slave,一台master机器,进行分布 ...
- Elasticsearch索引容量管理实践【>>戳文章免费体验Elasticsearch服务30天】
[活动]Elasticsearch Service免费体验馆>> Elasticsearch Service自建迁移特惠政策>>Elasticsearch Service新用户 ...
- 【Electron Playground 系列】文件下载篇
作者:long.woo 文件下载是我们开发中比较常见的业务需求,比如:导出 excel. web 应用文件下载存在一些局限性,通常是让后端将响应的头信息改成 Content-Disposition: ...
- fMRI数据分析学习笔记——常用工具
背景 在学习fMRI数据处理的过程中,通过其他的资料看到了别人推荐的有用的fMRI数据处理软件和小插件,在此记录一下,以便后期慢慢学习使用. 1.NeuroImaging Analysis Kit ( ...
- mysql 查询出来的内容无法显示全部
前几天在做查询的时候,由于使用了字段拼接,所以查出来的其中一列,数据很长,但是每次显示一定的长度后,后面的就无法显示 原因是因为mysql设置查询出来的长度,好像默认是1024,因为我使用的是yii2 ...
- Python3和高性能全文检索引擎Redisearch进行交互
安装 pip install redisearch 使用 from redisearch import Client, TextField # 创建一个客户端与给定索引名称 client = Clie ...
- C#中打印拼接的字符串
实例化打印文档 //声明打印对象 PrintDocument pd = new PrintDocument(); int ilvPreviewIndex = 0; 在打印事件中设置基本属性 priva ...
- 设计模式之-Builder模式
场景引入: 一个类,如果有多个属性时,在创建对象,如何对属性进行赋值呢? 1.通过构造器赋值,这种方案优点时一次性赋值完成,但是多种属性的组合,导致构造器会非常多. 2.通过setter方法赋值,方案 ...
- [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步
[从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataServerChangeEvent及数据同步 目录 [从源码学设计]蚂蚁金服SOFARegistry 之 LocalDataSe ...