您的位置:首页 > 其它

15.树的子结构

2016-05-04 20:32 453 查看
树的子结构

参与人数:4088时间限制:1秒空间限制:32768K
算法知识视频讲解


题目描述

输入两颗二叉树A,B,判断B是不是A的子结构。

做百度在线笔试的时候遇到了这道题,当时没有做出来,树的遍历一般用到递归,而这正是我的弱项,要加强练习!

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* p1, TreeNode* p2) {
bool result = false ;

if ( p1 != NULL && p2 != NULL ) {

if ( p1->val == p2->val )
result = isSubTree( p1, p2 ) ;

if ( result == false )
result = HasSubtree( p1->left, p2 ) ;

if ( result == false )
result = HasSubtree( p1->right, p2 ) ;

}
return result ;
}

bool isSubTree( TreeNode* p1, TreeNode* p2 ) {
if ( p2 == NULL ) {
return true ;
}

if ( p1 == NULL )
return false ;

if ( p1->val != p2->val ) {
return false ;
}

return ( isSubTree( p1->left, p2->left ) && isSubTree( p1->right, p2->right ) ) ;
}
};
isSubTree是一个尾递归函数,尾递归先写好逻辑,在最后一步加入递归逻辑,算是比较简单的~

HasSubtree的判断我写成了

while (p1 != NULL && p2 != NULL)
........已经是递归了还做while循环,简直是作死。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: