[置顶] 【LeetCode】101. Symmetric Tree 解题报告
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51541984 Subject
For example,this binary tree is symmetric: 1
/
2 2
/ /
3 4 4 3 But the following is not: 1
/
2 2
3 3 Explain
Solutionsolution 1
/**
* 双端队列 <br />
* DFS <br />
* 3ms <br />
* beats 6.29% of java submissions
*
* @param root
* @return
*/
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
Deque<TreeNode> deque = new LinkedList<TreeNode>();
deque.addFirst(root.left);
deque.addLast(root.right);
TreeNode preNode = null;
TreeNode postNode = null;
while (!deque.isEmpty()) {
preNode = deque.pollFirst();
postNode = deque.pollLast();
if (preNode == null && postNode == null) {
continue;
}
if (preNode == null || postNode == null) {
return false;
}
if (preNode.val != postNode.val) {
return false;
} else {
deque.addFirst(preNode.right);
deque.addFirst(preNode.left);
deque.addLast(postNode.left);
deque.addLast(postNode.right);
}
}
return true;
}
solution 2
/**
* 递归方式 <br />
* 1ms <br />
*
* @param root
* @return
*/
public boolean isSysmmetric2(TreeNode root) {
if (root == null) {
return true;
}
return checkNodes(root.left,root.right);
}
public boolean checkNodes(TreeNode node1,TreeNode node2) {
if (node1 == null && node2 == null) {
return true;
}
if (node1 == null || node2 == null) {
return false;
}
if (node1.val != node2.val) {
return false;
} else {
return checkNodes(node1.left,node2.right)
&& checkNodes(node1.right,node2.left);
}
}
solution 3
/**
* 拷贝1颗2叉树,reverse。或拷贝的时候直接反转。 <br />
* 然后在使用Same Tree的方法判断这两个树是不是1样。 <br />
* 1ms
*
* @param root
* @return
*/
public boolean isSysmmetric3(TreeNode root) {
if (root == null) {
return true;
}
TreeNode newRootNode = copyNode(root);
SameTree sameTree = new SameTree();
return sameTree.isSameTree(root,newRootNode);
}
/**
* 左右对换结点拷贝2叉树
*
* @param node
* @return
*/
private TreeNode copyNode(TreeNode node) {
if (node == null) {
return null;
}
TreeNode treeNode = new TreeNode(node.val);
treeNode.left = copyNode(node.right);
treeNode.right = copyNode(node.left);
return treeNode;
}
bingo~~ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |