package com.interview.books.question300;
import com.interview.leetcode.utils.TreeNode;
import java.util.HashMap;
/**
* Created_By: stefanie
* Date: 14-12-16
* Time: 上午11:58
*/
public class TQ27_SubBinaryTreeChecker {
public String inOrderTraverse(TreeNode root){
if(root == null) return "";
StringBuffer buffer = new StringBuffer();
inOrderTraverse(root, buffer);
return buffer.toString();
}
private void inOrderTraverse(TreeNode node, StringBuffer buffer){
if(node.left == null && node.right == null){
buffer.append(node.val);
return;
}
if(node.left == null) buffer.append("#");
else inOrderTraverse(node.left, buffer);
buffer.append(node.val);
if(node.right == null) buffer.append("#");
else inOrderTraverse(node.right, buffer);
}
public String preOrderTraverse(TreeNode root){
if(root == null) return "";
StringBuffer buffer = new StringBuffer();
preOrderTraverse(root, buffer);
return buffer.toString();
}
private void preOrderTraverse(TreeNode node, StringBuffer buffer){
buffer.append(node.val);
if(node.left == null && node.right == null) return;
if(node.left == null) buffer.append("#");
else preOrderTraverse(node.left, buffer);
if(node.right == null) buffer.append("#");
else preOrderTraverse(node.right, buffer);
}
public boolean isSubTree(TreeNode t1, TreeNode t2){
if(inOrderTraverse(t1).contains(inOrderTraverse(t2)) && preOrderTraverse(t1).contains(preOrderTraverse(t2))) return true;
else return false;
}
public static void main(String[] args){
TQ27_SubBinaryTreeChecker checker = new TQ27_SubBinaryTreeChecker();
TreeNode t1 = TreeNode.sampleBST();
HashMap<Integer, TreeNode> nodes = new HashMap<>();
for (int i = 1; i < 5; i++) {
nodes.put(i, new TreeNode(i));
}
nodes.get(2).left = nodes.get(1);
nodes.get(2).right = nodes.get(3);
TreeNode t2 = nodes.get(2);
System.out.println(checker.isSubTree(t1, t2)); //false
nodes.get(3).right = nodes.get(4);
System.out.println(checker.isSubTree(t1, t2)); //true
t2 = new TreeNode(3);
t2.left = new TreeNode(4);
System.out.println(checker.isSubTree(t1, t2)); //false
}
}