Leetcode算法学习日志-572 Subtree of Another Tree

来源:互联网 发布:用手机看淘宝价格走势 编辑:程序博客网 时间:2024/05/29 17:58

Leetcode 572 Subtree of Another Tree

题目原文

Given two non-empty binary trees s andt, check whether tree t has exactly the same structure and node values with a subtree ofs. A subtree of s is a tree consists of a node ins 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.

题意分析

判断树t是不是树s的子树。

解法分析

该题采用递归的思想解决,比较树s和树t,如果s=t,则t一定是s的子树,不然递归s的两个子树,判断t是不是这两个子树的子树,是其中一个的子树则函数返回1.C++代码如下

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool theSame(TreeNode* s, TreeNode*t){        if(t==NULL||s==NULL){//This is important            if(t==s)                return true;            else                return false;             }        if((s->val)!=(t->val))            return false;        return theSame(s->left,t->left)&&theSame(s->right,t->right);    }    bool isSubtree(TreeNode* s, TreeNode* t) {        if(theSame(s,t))            return true;        if(s==NULL)//This is important            return false;        return isSubtree(s->left,t)||isSubtree(s->right,t);     }};
上述代码需要注意对空指针的处理,不然会造成runtime error。