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

你可能感兴趣的:(leetCode)