Subtree of Another Tree
3
/ \
4 5
/ \
1 2 4
/ \
1 2 3
/ \
4 5
/ \
1 2
/
0Last updated
3
/ \
4 5
/ \
1 2 4
/ \
1 2 3
/ \
4 5
/ \
1 2
/
0Last updated
4
/ \
1 2/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public bool IsSubtree(TreeNode s, TreeNode t) {
if(s == null && t == null){
return true;
}
if(s == null){
return false;
}
if(t == null){
return false;
}
bool flag = IsChecked(s, t);
if(flag){
return true;
}
return IsSubtree(s.left, t) || IsSubtree(s.right, t);
}
public bool IsChecked(TreeNode s, TreeNode t){
if(s == null && t == null){
return true;
}
if(s == null || t == null){
return false;
}
bool left = IsChecked(s.left, t.left);
bool right = IsChecked(s.right, t.right);
return left && right && s.val == t.val;
}
}/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public bool IsSubtree(TreeNode s, TreeNode t) {
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.Push(s);
while(stack.Count > 0){
TreeNode node = stack.Pop();
if(node.val == t.val){
bool flag =IsChecked(node, t);
if(flag){
return flag;
}
}
if(node.right != null){
stack.Push(node.right);
}
if(node.left != null){
stack.Push(node.left);
}
}
return false;
}
public bool IsChecked(TreeNode s, TreeNode t){
if(s == null && t == null){
return true;
}
if(s == null || t == null){
return false;
}
bool left = IsChecked(s.left, t.left);
bool right = IsChecked(s.right, t.right);
return left && right && s.val == t.val;
}
}