Leetcode二叉树层序遍历相关

51 阅读1分钟

102. 二叉树的层序遍历

主要使用迭代的方式处理(递归有点难理解)

class Solution {

public List<List<Integer>> levelOrder(TreeNode root) {

if(root==null)return new ArrayList<List<Integer>>();

List<List<Integer>> res = new ArrayList<List<Integer>>();

LinkedList<TreeNode> q = new LinkedList<TreeNode>();

q.offer(root);

while(q.size()>0){

int deep = q.size();

ArrayList<Integer> temp = new ArrayList<Integer>();

for(int i=0;i<deep;++i) {

TreeNode tmp = q.poll();

temp.add(tmp.val);

if(tmp.left!=null)q.offer(tmp.left);

if(tmp.right!=null)q.offer(tmp.right);

}

res.add(temp);

  


}

return res;

}

}

226. 翻转二叉树

class Solution {

public TreeNode invertTree(TreeNode root) {

if(root==null)return null;

swap(root);

invertTree(root.left);

invertTree(root.right);

return root;

}

  


private void swap(TreeNode root) {

TreeNode tmp = root.left;

root.left = root.right;

root.right = tmp;

}

}

101. 对称二叉树

必须使用后序遍历

class Solution {

public boolean isSymmetric(TreeNode root) {

return compare(root.left,root.right);

}

private boolean compare(TreeNode left,TreeNode right){

if(left==null&&right!=null) return false;

if(left!=null&&right==null) return false;

if(left==null&&right==null) return true;

if(left.val!=right.val)return false;

  


boolean outside = compare(left.left,right.right);

boolean inside = compare(left.right,right.left);

return outside&&inside;

}

}