博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode & 剑指offer刷题】树题8:26 树的子结构(572. Subtree of Another Tree)
阅读量:5257 次
发布时间:2019-06-14

本文共 1588 字,大约阅读时间需要 5 分钟。

572. Subtree of Another Tree

Given two non-empty binary trees  
s   and  
t , check whether tree  
t   has exactly the same structure and node values with a subtree of  
s . A subtree of  
s is a tree consists of a node in 
s  and all of this node's descendants. The tree  
s could also be considered as a subtree of itself.
Example 1:
Given tree s:
  3
 / \
 4  5
/ \
1 2
Given tree t:
 4
/ \
1  2
Return 
true , because t has the same structure and node values with a subtree of s.
Example 2:
Given tree s:
     3
    / \
   4   5
  / \
 1  2
    /
   0
Given tree t:
 4
/ \
1 2
Return 
false .

 
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
/*
问题:判断某子树是否是主树的子结构
方法:前序遍历的递归方法
主树s, 子树t
*/
class
Solution
{
public
:
   
bool
isSubtree
(
TreeNode
*
s
,
TreeNode
*
t
)
//遍历主树s(前序遍历递归法)
   
{
       
if
(
s
==
nullptr
)
return
false
;
//前序遍历递归的出口,
注意一定要加判断空指针的语句,后面有s->left和s->right
       
       
//前序遍历(递归法)主树t各结点,从根结点到左子树再到右子树(s一直在延伸,展开分支)
       
if
(
isSame
(
s
,
t
)) 
//判断当前结点下的子树是否一样
            return
true
; 
       
else
             //判断当前结点的左子树是否为子树t,再判断右子树是否为子树t
            return
isSubtree
(
s
->
left
,
t
)
||
isSubtree
(
s
->
right
,
t
); 
   
}
private
:
   
bool
isSame
(
TreeNode
*
s
,
TreeNode
*
t
)
//确定s父结点后,开始同时扫描(递归法)s和t,看是各个结点是否相等
   
{
       
if
(
s
==
nullptr
&&
t
==
nullptr
)
return
true
;
//如果最后均遍历到空结点,返回true
       
else
if
(
s
==
nullptr
||
t
==
nullptr
)
return
false
;
//如果一个遍历到空,一个没有,说明不同,返回false
       
       
if
(
s
->
val
==
t
->
val
)
       
{
           
return
isSame
(
s
->
left
,
t
->
left
)
&&
isSame
(
s
->
right
,
t
->
right
);
       
}
       
else
           
return
false
;
//不相同,返回假 
   
}
};
 
 
 

 

转载于:https://www.cnblogs.com/wikiwen/p/10225819.html

你可能感兴趣的文章
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>