标签:tree
题目
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
解答判断两棵树是否相同。
递归,先判断根节点是否相同,如果相同,继续递归判断左右节点;
迭代,利用栈,当两棵树都不为空,并且节点值相同时,分别对左右子节点入栈,循环判断。代码如下:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ //递归解法,如果根节点相同,再递归的看左子树和右子树是否相同 public class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q==null){ return true; }else if(p!=null&&q!=null){ if(p.val==q.val) return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right); else return false; }else{ return false; } } } //递归2 public boolean isSameTree(TreeNode p, TreeNode q) { if(p==null&&q==null){ return true; } if(p==null&&q!=null||(p!=null&&q==null)){ // if(p==null||q==null) return false; } if(p.val!=q.val){ return false; } return 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; } Stack<TreeNode> s1=new Stack<TreeNode>(); Stack<TreeNode> s2=new Stack<TreeNode>(); s1.add(p); s2.add(q); while(!s1.isEmpty()&&!s2.isEmpty()){ TreeNode t1=s1.pop(); TreeNode t2=s2.pop(); if(t1==null&&t2==null){ continue; }else if(t1!=null&&t2!=null&&t1.val==t2.val){ //注意入栈顺序 s1.push(t1.right); s1.push(t1.left); s2.push(t2.right); s2.push(t2.left); }else{ return false; } } return true; }
---EOF---
标签:tree
原文地址:http://blog.csdn.net/navyifanr/article/details/42061227