题目:判断两个二叉树是否相等
思路:递归与迭代
递归:
public static boolean isSameRec(TreeNode root1,TreeNode root2){ if(root1 == null && root2 == null){ return true; }else if(root1 == null || root2 == null){ return false; }else if(root1.val != root2.val){ return false; } boolean left = isSameRec(root1.left,root2.left); boolean right = isSameRec(root1.right,root2.right); return left&right; }
迭代:迭代要注意,借助了两个辅助栈,要注意的是,若某一节点的左孩子或右孩子为null,也要添加到栈中。
public static boolean isSameTree(TreeNode root1,TreeNode root2){ if(root1 == null && root2 == null){ return true; }else if(root1 == null || root2 == null){ return false; }else if(root1.val != root2.val){ return false; } Stack<TreeNode> stack1 = new Stack<TreeNode>(); Stack<TreeNode> stack2 = new Stack<TreeNode>(); stack1.push(root1); stack2.push(root2); while(!stack1.isEmpty() && !stack2.isEmpty()){ TreeNode n1 = stack1.pop(); TreeNode n2 = stack2.pop(); if(n1 == null && n2 == null){ continue; } else if(n1 != null && n2 != null && n1.val == n2.val){ stack1.push(n1.left); stack1.push(n1.right); stack2.push(n2.left); stack2.push(n2.right); }else { return false; } } return true; }