Same Tree

該題目用來解決兩棵二叉樹是不是同一顆樹!解決的方式是經過樹的遍從來判斷兩棵樹的節點是不是相等。 java

考慮到效率問題,該題目使用前序遍歷比較好。比較不相等能夠當即返回。 code

1. 採用非遞歸方式遍歷樹。 遞歸

public boolean isSameTree(TreeNode p, TreeNode q) {
        Stack<TreeNode> first = new Stack<TreeNode>();
        Stack<TreeNode> second = new Stack<TreeNode>();
        TreeNode fP = p;
        TreeNode sQ = q;
        while((fP!=null || !first.isEmpty()) && (sQ!=null || !second.isEmpty())){
        	
        	if(fP==null || sQ == null){
        		return fP == sQ;
        	}
        	while(fP!=null && sQ!=null){
        		if(fP.val != sQ.val){
        			return false;
        		}
        		
        		first.push(fP);
        		second.push(sQ);
        		fP = fP.left;
        		sQ = sQ.left;
        	}
        	
        	if(!first.isEmpty() && !second.isEmpty()){
        		fP = first.pop();
        		sQ = second.pop();
        		fP = fP.right;
        		sQ = sQ.right;
        	}
        }
        
        if(!first.isEmpty() || !second.isEmpty()){
        	return false;
        }
        return true;
    }



2. 使用遞歸方式遍歷。

  public boolean isSameTree(TreeNode p, TreeNode q) {
     if(p == null || q == null){
         return p == q;
     }
     
     return (p.val == q.val) && isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
   }
相關文章
相關標籤/搜索