tree
Lzed
我好菜啊
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 222 - ount Complete Tree Nodes(二分 + 完全二叉树)
题意给一个完全二叉树,求节点数目。思路首先,假设完全二叉树的深度为h,那么0到h - 1都是满的,只有h不一定是满的。算法1我们只需要知道最后一层的最后一个不是NULL的节点是哪一个就可以了。我们假设最后一层的所以节点编号为[0,2n−1](n=h−1)[0, 2^n - 1] \quad(n = h - 1)。那么我们二分一下最后一层最后一个非NULL节点就好了。然后去判断这个节点是否存在。在判断原创 2017-02-13 14:28:21 · 259 阅读 · 0 评论 -
Leetcode 110 - Balanced Binary Tree (dfs)
题意给一个二叉树,判断是否平衡思路dfs即可。对于一个节点,我们需要求出其左右子树的高度,然后判断是高度差是否小于等于1。但是注意的是如果从上往下做,每次求一下高度,时间复杂度会上升到O(n2)O(n^2),因此需要从下往上做。并且,若对于一个节点,其左右子树中一个不平衡,那么就直接返回不平衡。算法1是用一个pair<int, bool>:其中第一维代表当前节点的高度,第二维表示以该节点为根节点的子原创 2017-07-08 15:37:15 · 406 阅读 · 0 评论 -
Leetcode 538 - Convert BST to Greater Tree
题意给一个BST,改变其节点的值,将其节点的值加上所有比他大的节点的值思路首先注意是BST,其中序遍历的节点是递增序列。即假设中序遍历后的结果是a0,a1,a2,....ana_0, a_1, a_2, .... a_n,我们有a0<a1<a2<...<ana_0 < a_1 < a_2 < ... < a_n。那么对于aia_i,其改变后的值应该是ai+ai+1+ai+2+...+ana_i +原创 2017-07-08 14:14:25 · 394 阅读 · 0 评论 -
LeetCode Weekly Contest 36
链接https://leetcode.com/contest/leetcode-weekly-contest-36/题目617. Merge Two Binary Trees题意合并两个二叉树。 操作如下: 树A和树B相应节点都有值,相加即可 如果一棵树的相应节点没有值,那么用另一个树的节点思路按照操作递归下去即可代码/** * Definition for a binary tree no原创 2017-06-11 14:39:17 · 415 阅读 · 0 评论 -
Leetcode 501 - Find Mode in Binary Search Tree(BST求众数)
题意给一个BST,求val值的众数(可能有多个)follow up:能否只用O(1)O(1)空间呢?(二叉树遍历过程中的栈空间不计入)思路算法1O(n)O(n)时间,O(n)O(n)空间遍历二叉树,并且用一个vis[]数组来记录每个数出现了多少次。为了避免vis[]太大爆内存,可用unordered_map替代算法2O(n)O(n)时间,O(1)O(1)空间我们知道BST一个很重要的性质就是:其中序原创 2017-07-01 14:25:48 · 421 阅读 · 0 评论 -
Leetcode 563 - Binary Tree Tilt (dfs)
题意给一个二叉树,求二叉树的tilt之和。tilt定义为:对于某个节点,其tilt为左子树的和 - 右子树的和的绝对值思路递归求左右子树的和。对于某个节点,以其为根节点的子树的和为:左子树的和 + 右子树的和 + 当前节点的值在递归的过程中,将abs(左子树的和 - 右子树的和)累加进tilt即可代码/** * Definition for a binary tree node. * struc原创 2017-07-01 13:11:32 · 343 阅读 · 0 评论 -
Leetcode 543 - Diameter of Binary Tree(树的直径)
题意求树的直径思路首先,树的直径不一定经过根节点。然后,我们想树的直径一定是以某个点作为根节点,然后左子树的最长边 + 右子树的最长边。所以,我们只需要在dfs求最长边的过程中更新一下直径即可。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;原创 2017-07-01 12:02:53 · 365 阅读 · 0 评论 -
Leetcode 572 - Subtree of Another Tree (dfs)
题意给两个二叉树s和t,判断t是否是s的一个子树思路直接递归就好。首先,p和q分别指向s和t的根节点,如果两个值不等,就应该分别去s的左右子树继续查找。关键是相等的时候:如果判断其子树相同的话,那么成立。如果判断其子树不等,又应该分别去s的左右子树查找代码/** * Definition for a binary tree node. * struct TreeNode { * int原创 2017-06-30 18:31:15 · 801 阅读 · 0 评论 -
Leetcode 236 - Lowest Common Ancestor of a Binary Tree (LCA)
链接https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/#/description题意给一个二叉树,求两个节点的LCA思路求LCA有很多算法, 有基于RMQ的离线算法,也有倍增,不过这两个写起来稍微麻烦一点。 这里写简单一点的方法算法1假设我们知道每个节点的父节点是谁,求p和q的LCA时,我们先求出这两个节点的原创 2017-06-30 18:14:42 · 303 阅读 · 0 评论 -
Leetcode 235 - Lowest Common Ancestor of a Binary Search Tree (LCA)
链接https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/solutions题意给一个BST,求两个节点的LCA思路相比于二叉树的LCA就会简单很多,我们只需要从根节点往下走,找到他们俩的分叉点即可。代码/** * Definition for a binary tree node. * st原创 2017-06-30 17:53:27 · 317 阅读 · 0 评论 -
Leetcode 606 - Construct String from Binary Tree (dfs)
题目链接https://leetcode.com/problems/construct-string-from-binary-tree/#/description题意给一个二叉树,要求用括号的形式表示出其前序遍历的结果。要取掉冗余的括号思路dfs 对于一个节点,有以下几种情况: 1. 空节点 2. 非空,无左右儿子:这时候我们将这个节点加入到结果直接返回即可 3. 非空,有左儿子,无右儿子:原创 2017-06-05 18:25:41 · 478 阅读 · 0 评论 -
Leetcode 337 - House Robber III(dfs)
最近实验多成狗完全没时间刷题啊= =题意给定一个二叉树,每个节点上有value,要求从二叉树上选一些点,是这些点的和加起来最大。并且有要求:如果一个节点选择了,那么其父节点和子节点都不能被选择。思路算法1暴力dfs,记录当前访问的节点及其父节点的访问状态:dfs(TreeNode *root, int s)s=1s = 1:父节点被访问了,那么该节点不能被访问。只能转移到dfs(root->left原创 2017-03-22 11:06:24 · 281 阅读 · 0 评论 -
Leetcode 144 - Binary Tree Preorder Traversal(二叉树前序遍历)
题意求二叉树的前序遍历。 思路分为递归实现和利用栈模拟递归实现。 递归实现的代码和思路很简单就不详细说了。关键是我们如何利用栈非递归的去实现。 关键思路就是:对于当前节点,我们递归的去对它的左子树和右子树做相同的操作。 考虑前序遍历的过程: 假设当前节点为p,当p有左子树的时候,我们去访问p的左子树。如果p有右子树,我们去访问p的右子树。 算法1利用栈先进后出的特点: 1. 加入根节点原创 2017-03-12 14:43:29 · 290 阅读 · 0 评论 -
Leetcode 107 - Binary Tree Level Order Traversal II(Tree)
题意从最后一层往第一层开始遍历二叉树,并且每层保存在一个vector中。思路算法1bfs。从第一层开始遍历到最后一层,最后把结果翻转一下就好。算法2dfs,在dfs的过程中需要保存层数。代码bfsclass Solution { private: vector<vector<int>> ans; public: void bfs(TreeNode *root) { q原创 2017-03-11 19:28:38 · 382 阅读 · 0 评论 -
Codeforces 764C - Timofey and a tree(dfs)
题意给一棵树,树上每个节点都有颜色,现在要求删掉一个点,在删掉这个点后,剩下的所有子树,每个子树上的所有点颜色相同。思路缩点。 我们将树上相连的,并且颜色相同的点缩成一个点。在缩点重新建图后,假设重新建图后有tot个点,那么一定要有一个点满足度为tot - 1(即这个点和其他所有点相连并且其他点互不相连)。代码#include <bits/stdc++.h>using namespace std;原创 2017-02-03 01:02:04 · 351 阅读 · 0 评论 -
Leetcode 623 - Add One Row to Tree (dfs)
Linkhttps://leetcode.com/problems/add-one-row-to-tree/description/Solution首先,处理特殊情况:若d == 1,新添加的节点将成为根结点 然后,对于一般情况:dfs到d - 1层,根据要求添加节点即可Code/** * Definition for a binary tree node. * struct TreeNode原创 2017-07-30 17:53:08 · 464 阅读 · 0 评论
分享