![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
tomjobs
别慌,慌也没用
展开
-
LeetCode 662. 二叉树最大宽度(层序遍历,防溢出)
题意: 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。 思路: 一开始用深度优先遍历计数来写的,但是这样会溢出。通过层序遍历,每次优先遍历完这一层,并且计数值减去起点计数值,就不会溢出了。 class Solution { public: int widthOfBinaryTree原创 2021-10-12 20:38:12 · 241 阅读 · 0 评论 -
LeetCode 440. 字典序的第K小数字(递归,十叉树)
字典序的第K小数字 给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。 注意:1 ≤ k ≤ n ≤ 109。 示例 : 输入: n: 13 k: 2 输出: 10 解释: 字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。 思路: gjx说这是字节面试题,感觉有点意思。 写过各种求第k大数(第k个排列,第k个错排排列,通过数位DP求有奇怪限制的第k个二进制串。。。)本题则是字典序第k大。 要求字典序第k.原创 2020-11-25 22:25:06 · 417 阅读 · 0 评论 -
二叉树前中后序的非递归遍历(用栈实现)
前序遍历 class Solution { public: vector<int> preorderTraversal(TreeNode* root) { stack<TreeNode*>stk; stk.push(root); vector<int>ans; while(!stk.empty()) { TreeNode* now = stk.top();stk.pop();原创 2021-03-14 11:11:59 · 181 阅读 · 0 评论 -
LeetCode 331. 验证二叉树的前序序列化(统计度数,栈)
给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。 示例 1: 输入: “9,3,4,#,#,1,#,#,2,#,6,#,#” 输出: true 示例 2: 输入: “1,#” 输出: false 示例 3: 输入: “9,#,#,1” 输出: false 思路: 两种写法,统计度数和栈。 统计度数: 根节点入度为0,出度为2;其他有效节点的入度为1,出度为2;每个无效节点的入度为1,出度为0。遍历过程中只要保证除了最后一个节点的出度,所有遍历过节点出度-原创 2021-03-13 21:12:40 · 183 阅读 · 0 评论 -
LeetCode889. 根据前序和后序遍历构造二叉树
思路: 前序是根左右,后续是左右根,设当前前序为pre数组,后序为post数组。 则当前树的根节点为pre.front()pre.front()pre.front()或者post.back()post.back()post.back()。 此时我们要划分子问题, 对于左子树,根节点为pre[1]pre[1]pre[1],同时找到后序遍历左子树的根节点pos1pos1pos1满足post[pos1]=pre[1]post[pos1]=pre[1]post[pos1]=pre[1]。 对于右子树,根节点为pos原创 2020-10-30 11:49:16 · 213 阅读 · 0 评论 -
F - Factor-Free Tree Gym - 101623F(质数,中序遍历,区间)
题意: 给出一颗树的中序遍历,要求还原这棵树使得每一个节点的值和其祖先互质 思路: 参考claris博客题解。 对每个数质因子分解,算出每个数左边的第一个不互质位置,右边第一个不互质位置。 维护每个点对应的区间,也就是其对应子树。 将这些区间放在栈里面,如果当前区间包含栈顶区间,那么弹出栈顶。 则按照中序遍历左中右的顺序,最后一个弹出的区间为当前点的左子树,当前栈顶区间为节点父子节点。 则无解情况为栈顶区间不包含当前区间,此时父节点不能包括子节点。 #include <cstdio> #inc.原创 2020-10-09 22:17:33 · 301 阅读 · 0 评论 -
L2-006 树的遍历 (25分)
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2 3 1 5 7 6 4 1 2 3 4 5 6...原创 2020-02-21 17:36:35 · 255 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (25分)
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值; 其右子树中所有结点的键值大于等于该结点的键值; 其左右子树都是二叉搜索树。 所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。 给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。 输入格式: 输入的第一行给出正整数 N(≤1...原创 2020-02-21 17:20:32 · 357 阅读 · 0 评论 -
L2-011 玩转二叉树 (25分)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不...原创 2020-02-21 16:05:31 · 299 阅读 · 0 评论 -
Ralph And His Tour in Binary Country CodeForces - 894D(树上前缀和,好题)
Ralph is in the Binary Country. The Binary Country consists of n cities and (n - 1) bidirectional roads connecting the cities. The roads are numbered from 1 to (n - 1), the i-th road connects the city...原创 2019-09-07 23:15:59 · 263 阅读 · 0 评论