一、查看两个二叉树是否相同
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null){
return true;
}
if(p == null || q == null){
return false;
}
return p.val == q.val&&isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
二、一个树的子树
public boolean isSameTree(TreeNode p,TreeNode q){
if(p == null && q == null){
return true;
}
if(p == null || q == null){
return false;
}
return p.val == q.val&&isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
}
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s == null){
return false;
}
if(isSameTree(s,t)){
return true;
}
if(isSubtree(s.left,t)){
return true;
}
if(isSubtree(s.right,t)){
return true;
}
return false;
}
三、重构二叉树,输入先序遍历,输出中序遍历,一个栈就可以完成
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
char[] ch = str.toCharArray();
Stack<Character> stack = new Stack<>();
stack.push(ch[0]);
for(int i=1;i<ch.length-1;i++){
if(ch[i]=='#'){
System.out.print(stack.pop()+" ");
}else{
stack.push(ch[i]);
}
}
System.out.println();
}
}
}