题库一、二叉树的层序遍历
广度优先和队列解法 二、二叉树的最大深度
递归解法 三、对称二叉树
递归解法 总结
题库 一、二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。原题
广度优先和队列解法建立集合存储最终数据,建立队列暂时存储数据。按从根到叶,从左到右的顺序遍历二叉树,把访问到的结点的值和左子结点的值,右子结点的值依次加入队列,然后再取出加入集合。
代码如下:
public List二、二叉树的最大深度> levelOrder(TreeNode root) { List
> st = new ArrayList
>(); if(root == null) return st; Queue
queue = new linkedList (); queue.offer(root); while(!queue.isEmpty()) { List level = new ArrayList (); int leveSize = queue.size(); for(int i = 1;i <= leveSize;i++) { TreeNode node = queue.poll(); level.add(node.val); if(node.left != null) queue.offer(node.left); if(node.right != null) queue.offer(node.right); } st.add(level); } return st; }
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。原题
递归解法通过每次递归当前结点的左子树和右子树的深度进行比较,取其中较大的一个返回。当访问到叶子结点时,返回 0 .
代码如下:
public int maxDepth(TreeNode root) {
return diGui(root);
}
public int diGui(TreeNode root) {
if(root == null)
return 0;
int leftMax = diGui(root.left);
int rightMax = diGui(root.right);
return (leftMax > rightMax ? leftMax:rightMax)+1;
}
三、对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。原题
递归解法通过观察可以得知,对称的二叉树满足几个条件:1.左子结点与右子结点相等。2.左子结点的右子树和右子结点的左子树内容相等。
代码如下:
public boolean isSymmetric(TreeNode root) {
return check(root,root);
}
public boolean check(TreeNode left,TreeNode right) {
if(left == null && right == null)
return true;
if(left == null || right == null)
return false;
return left.val == right.val && check(left.left,right.right) && check(left.right,right.left);
}
总结
基于二叉树的特点,在做题时可以优先考虑递归思维。



