二叉树的子树和子结构的几个问题
来源:互联网 发布:apache tomcat怎么安装 编辑:程序博客网 时间:2024/06/05 15:34
子树的意思是包含了一个节点,就得包含这个节点下的所有节点,一棵大小为n的二叉树有n个子树,就是分别以每个节点为根的子树。
子结构的意思是包含了一个节点,可以只取左子树或者右子树,或者都不取。
1.求一棵二叉树的最大BST子树
struct Result {int size, min, max;TreeNode* maxBST;Result(int min, int max, TreeNode* maxBST, int size) : min(min), max(max), maxBST(maxBST), size(size) {}};Result maxBST(TreeNode* root) {if (!root) return Result(INT_MAX, INT_MIN, nullptr, 0);auto l = maxBST(root->left);auto r = maxBST(root->right);if (l.maxBST == root->left && (!root->left || l.max < root->val) && r.maxBST == root->right && (!root->right || r.min > root->val))return Result(!root->left ? root->val : l.min, !root->right ? root->val : r.max, root, l.size + r.size + 1);return l.size > r.size ? Result(l.min, r.max, l.maxBST, l.size) : Result(l.min, r.max, r.maxBST, r.size);}TreeNode* maxBSTSubTree(TreeNode* root) {return maxBST(root).maxBST;}
2求一个树的最大BST子结构
int maxBSTSubStructrue(TreeNode* root, int lo, int hi) {if (!root || root->val < lo || root->val > hi) return 0;return maxBSTSubStructrue(root->left, lo, root->val) + maxBSTSubStructrue(root->right, root->val, hi) + 1;}void dfs(TreeNode* root, int &maxLen) {if (root == nullptr) return;maxLen = max(maxLen, maxBSTSubStructrue(root, INT_MIN, INT_MAX));dfs(root->left, maxLen);dfs(root->right, maxLen);}int maxBSTSubStructrue(TreeNode* root) {int maxLen = 0;dfs(root, maxLen);return maxLen;}
3 问一棵树B是否是另一棵树A的子树
1)如果节点值不允许重复,则可以先遍历A找B的根结点的值,然后遍历B,判断两棵树是否完全相同 O(M + N)
2) 如果节点值可以重复,则对于A中每个和B根节点值相同的结点,都要check一次,最坏O(M *N)
4一棵树是否是另一棵树的子结构
情况和4一样,只是check的逻辑稍有区别,子树是说,根节点、左右子树都必须一样;子结构的情况,子结构的某个地方为空,目标树对应的地方可以有东西
0 0
- 二叉树的子树和子结构的几个问题
- 二叉树的子树和子结构 c++
- 树的子结构和拓扑相同的子树
- 判断一颗二叉树是不是另一颗的子结构(只是一部分,未必是子树)
- 交换二叉树的左子树和右子树
- 二叉树的子树
- 二叉树和最大的子树
- 二叉树和最大的子树
- 二叉树的最大子树和
- 二叉树的子结构
- 二叉树的子结构
- 二叉树的子结构
- 二叉树的子结构
- 二叉树的子结构
- 二叉树的子结构
- 二叉树的子结构
- 1021_二叉树的复制和左右子树交换
- 树结构的子树合并(不考虑子树顺序)
- 直方图规定化
- C++的三大特性封装 继承 多态的理解
- 有时间我就要写点书评
- 【NOI2015】【BZOJ4199】品酒大会
- excel笔记
- 二叉树的子树和子结构的几个问题
- 编译器? 求解两数运算?
- PHP的SAPI
- 【图像处理笔记】灰度变换
- 快速排序算法
- log4J 用法详细
- 如何用参数化SQL语句污染你的计划缓存
- n!的长度(stirling公式的应用)
- 64 互斥锁 线程通信 线程同步