Day15 二叉树 pat02
我的思路:
对list里面的结点逐个进行left和right判断,添加到list中进行下一轮判断,用temp数组保存每以层遍历的结点val值,用res保存所有层遍历的结果。
解答:
#非递归
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
List list = new ArrayList();
if(root == null) {
return new ArrayList();
}
list.add(root);
while(list.size() != 0) {
List temp = new ArrayList();
int size = list.size();
for(int i = 0; i < size; i++) {
TreeNode node = (TreeNode)list.remove(0);
temp.add(node.val);
if(node.left != null) {
list.add(node.left);
}
if(node.right != null) {
list.add(node.right);
}
}
res.add(temp);
}
return res;
}
}
层序遍历十道题(先占坑)
我的思路:
后续遍历 + 交换结点
解答:
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root == null) {
return null;
}
invertTree(root.left);
invertTree(root.right);
swapNode(root);
return root;
}
public void swapNode(TreeNode root) {
TreeNode tmp = new TreeNode();
tmp = root.right;
root.right = root.left;
root.left = tmp;
}
}
我的思路:
需要列举一下特殊情况
解答:
class Solution {
public boolean isSymmetric(TreeNode root) {
return compare(root.left, root.right);
}
public boolean compare(TreeNode node_left, TreeNode node_right) {
if(node_left == null && node_right != null) {
return false;
}
if(node_left != null && node_right == null) {
return false;
}
if(node_left == null && node_right == null) {
return true;
}
if(node_left.val != node_right.val) {
return false;
}
boolean b1 = compare(node_left.left, node_right.right);
boolean b2 = compare(node_left.right, node_right.left);
return b1 && b2;
}
}