面试题 04.09. 二叉搜索树序列
时间:2020-03-27
本文章向大家介绍面试题 04.09. 二叉搜索树序列,主要包括面试题 04.09. 二叉搜索树序列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
不会做,后来看了题解
题目的意思是,按某种顺序依次插入所有节点(不能插入已有树的中间,只能插在最下层)。
所以对于根节点root来说,必须先插入root,root左节点left,右节点right。接下来要么插入left,要么插入right。再下一步可以插入left的左或右孩子或者right的左或右孩子。
用一个双端队列保存待选值,其中每个值都可以作为接下来插入的节点。
代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> BSTSequences(TreeNode* root) { if(root==nullptr){return {{}};} vector<int> cur; vector<vector<int>> res; deque<TreeNode*> que; que.push_back(root); dfs(que,res,cur); return res; } void dfs(deque<TreeNode*> que,vector<vector<int>>& res,vector<int>& cur){ if(que.empty()){ res.emplace_back(cur); return; } int siz=que.size(); while(siz>0){ auto p=que.front(); que.pop_front(); cur.emplace_back(p->val); int child_cnt=0; if(p->left){ que.push_back(p->left); ++child_cnt; } if(p->right){ que.push_back(p->right); ++child_cnt; } dfs(que,res,cur); while(child_cnt){ que.pop_back(); --child_cnt; } que.emplace_back(p); cur.pop_back(); --siz; } } };
原文地址:https://www.cnblogs.com/FdWzy/p/12580797.html
- 简单易学的机器学习算法——线性回归(1)
- 当主键碰到NULL(r6笔记第64天)
- 记一次dg故障的处理总结(r6笔记第63天)
- Java企业面试——Javaweb
- Linux下/var/spool/clientmqueue空间不足的解决(r6笔记第81天)
- Pytorch 0.3发布:实现多方面提速,增加对ONNX支持 | 快讯
- 基于DB time的调优分析 (r6笔记第79天)
- 通过shell脚本抓取awr报告中的问题sql(r6笔记第78天)
- Tomcat 快速入门
- 服务器进程异常的原因分析(r6笔记第74天)
- Elastic 技术栈之 Filebeat
- Elastic 技术栈之 Logstash 基础
- 备库CPU使用异常优化(r6笔记第73天)
- 数据清理的遗留问题处理(二)(r6笔记第91天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法