2022-2-17剑指offer day7

题1:

JZ55 二叉树的深度

描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。   数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100
进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)
  假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图: 2022-2-17剑指offer day7
 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15     public int TreeDepth(TreeNode root) {
16         if (root==null) return 0;
17         return Math.max(TreeDepth(root.left),TreeDepth(root.right))+1;
18     }
19 }

思路:递归,左子树与右子树最大深度+1;

题2:

JZ77 按之字形顺序打印二叉树

 

描述

给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)   数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 100∣val∣<=100
要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n) 例如:
给定的二叉树是{1,2,3,#,#,4,5}
2022-2-17剑指offer day7
该二叉树之字形层序遍历的结果是 [ [1], [3,2], [4,5] ]
 1 import java.util.*;
 2 /*
 3 public class TreeNode {
 4     int val = 0;
 5     TreeNode left = null;
 6     TreeNode right = null;
 7 
 8     public TreeNode(int val) {
 9         this.val = val;
10 
11     }
12 
13 }
14 */
15 public class Solution {
16     public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
17         Queue<TreeNode> queue=new LinkedList<>();
18         ArrayList<ArrayList<Integer>> ans=new ArrayList<>();
19         if (pRoot==null) return ans;
20         queue.offer(pRoot);
21         boolean flag=true;
22         while (!queue.isEmpty()){
23             int size=queue.size();
24             ArrayList<Integer> list=new ArrayList<>();
25             for (int i=0;i<size;i++){
26                 TreeNode temp=queue.poll();
27                 list.add(temp.val);
28                 if (temp.left!=null) queue.offer(temp.left);
29                 if (temp.right!=null) queue.offer(temp.right);
30             }
31             if (!flag) {
32                 Collections.reverse(list);
33             }
34             flag=!flag;
35             ans.add(list);
36         }
37         return ans;
38     }
39 
40 }

思路:每一层的节点放入队列中,遍历时根据flag标记看要不要反转。

上一篇:SpringBoot树获取方法总结


下一篇:666