LeetCode-對稱二叉樹js解法

方法1
把其中一個子樹翻轉,然後對比兩個子樹是否相同

var isSymmetric = function(root) {
	let invert = function(treeNode){
		if(!treeNode)return null
		let node = treeNode.left
		treeNode.left = invert(treeNode.right)
		treeNode.right = invert(node)
		return treeNode
	}
	function isSameTree(p,q){
		if(!p&&!q)return true
		if(!p||!q)return false
		if(p.val!==q.val)return false
		return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)
	}
	return isSameTree(root?root.left:null,invert(root?root.right:null))
};

方法2
左子樹按照中左右的順序遍歷,右子樹按照中右左的順序遍歷,如果每一步訪問的值都相同,說明左右子樹對稱

var isSymmetric = function(root) {
	let hander = function(p,q){
		if(!p&&!q)return true
		if(!p||!q)return false
		if(p.val!==q.val)return false
		return hander(p.left,q.right)&&hander(p.right,q.left)
	}
	return hander(root?root.left:null,root?root.right:null)
}

方法3
使用棧(或者隊列),把需要比較的兩個節點壓進棧,再依次比較

var isSymmetric = function(root) {
	let list = []
	list.push(root?root.left:null)
	list.push(root?root.right:null)
	while(list.length>0){
		let p = list.pop()
		let q = list.pop()
		if(!p&&!q)continue
		if(!p||!q)return false
		if(p.val!==q.val)return false
		list.push(p.left)
		list.push(q.right)
		list.push(p.right)
		list.push(q.left)
	}
	return true
}

參考https://blog.csdn.net/xiezongsheng1990/article/details/79574057

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章