拓扑结构相同子树练习题
来源:互联网 发布:保罗特勤淘宝 编辑:程序博客网 时间:2024/05/17 02:10
一、题目
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。
给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。
二、2种思路
1、比对A树根结点与B树,不对再比对左孩子与B树,不对再比对左孩子的左孩子和B树……
2、将2个二叉树遍历成字符串形式str1、str2,如果str1中包含str2,就返回true。
三、思路一:
3.1 树结构体
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) ://初始化支持 TreeNode(int x)这种方式,即 把x赋给val,left和right赋值NULL。 val(x), left(NULL), right(NULL) { }};
3.2 遍历树寻找与B匹配的结点
class IdenticalTree {public: bool chkIdentical(TreeNode* A, TreeNode* B) { if (A == NULL || B == NULL) return false; else{ if (sameAs(A, B)){ return true; } else{ if (chkIdentical(A->left, B)){ return true; } if (chkIdentical(A->right, B)){ return true; } return false; } } } bool sameAs(TreeNode* A, TreeNode* B){ if (A == NULL&&B == NULL) return true; else if (A != NULL&&B != NULL){ if (A->val != B->val) return false; if (!sameAs(A->left, B->left)) return false; if (!sameAs(A->right, B->right)) return false; return true; } else return false; }};
四、思路二
4.1 string类的重要函数
begin 得到指向字符串开头的Iterator
end 得到指向字符串结尾的Iterator
rbegin 得到指向反向字符串开头的Iterator
rend 得到指向反向字符串结尾的Iterator
size 得到字符串的大小
length 和size函数功能相同
max_size 字符串可能的最大大小
capacity 在不重新分配内存的情况下,字符串可能的大小
empty 判断是否为空
operator[] 取第几个元素,相当于数组
c_str 取得C风格的const char* 字符串
data 取得字符串内容地址
operator= 赋值操作符
reserve 预留空间
swap 交换函数
insert 插入字符
append 追加字符
push_back 追加字符
operator+= += 操作符
erase 删除字符串
clear 清空字符容器中所有内容
resize 重新分配空间
assign 和赋值操作符一样
replace 替代
copy 字符串到空间
find 查找
rfind 反向查找
find_first_of 查找包含子串中的任何字符,返回第一个位置
find_first_not_of 查找不包含子串中的任何字符,返回第一个位置
find_last_of 查找包含子串中的任何字符,返回最后一个位置
find_last_not_of 查找不包含子串中的任何字符,返回最后一个位置
substr 得到字串
compare 比较字符串
operator+ 字符串链接
operator== 判断是否相等
operator!= 判断是否不等于
operator< 判断是否小于
operator>> 从输入流中读入字符串
operator<< 字符串写入输出流
getline 从输入流中读入一行
4.2 树结构转化为string
叶子结点后用‘#’表示结束。
void toString(TreeNode* A, string &str){ if (A != NULL){ str.push_back('0'+A->val); toString(A->left, str); toString(A->right, str); } else{ str.push_back('#'); } }
4.3 find函数找子串
class IdenticalTree {public: bool chkIdentical(TreeNode* A, TreeNode* B) { string str1, str2; toString(A, str1); toString(B, str2); int pos = str1.find(str2); if (pos <0) return false; else return true; }};
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- 拓扑结构相同子树练习题
- [牛客]拓扑结构相同子树练习题
- 拓扑结构相同子树
- 拓扑结构相同子树
- 拓扑结构相同子树练习
- 拓扑结构相同子树-------------->_<
- 拓扑结构相同子树 类似[LintCode]245
- 判断是否存在拓扑结构相同的子树(C++版)
- 树的子结构和拓扑相同的子树
- 面试算法题解----拓扑结构相同的子树问题
- 简单编程题目连载(十三)——拓扑结构相同子树判断
- 判断tl树中是否有与t2树拓扑结构完全相同的子树
- 算法编程题-判断一颗树中是否有与另一棵树拓扑结构完全相同的子树
- 判断t1树中是否有与t2树拓扑结构完全相同的子树
- 判断t1树是否有与t2树拓扑结构完全相同的子树
- jQuery数据缓存$.data 的使用以及源码解析
- IPV6表示
- 一次打PSU的感触
- 杭电 5506 GT and set
- mysql explain 各列的含义
- 拓扑结构相同子树练习题
- 杭电 2059 龟兔赛跑
- Android Studio集成SVN步骤及问题
- 字符串结束符'\0' -何时自动加- 字符串定义方法
- Thinkphp下使用Mysql的on duplicate key update功能
- 【MySQL】VS【SQLServer】
- iOS中 输入账户密码错误时的抖动提示
- hdu 4662 MU Puzzle 余数
- 真正的中国天气api接口xml,json(求加精) ...