2022-2-20 剑指offer day10

题1:

JZ32 从上往下打印二叉树

描述

不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。 2022-2-20 剑指offer day10 数据范围: 0<=节点总数<=1000 -1000<=节点值<=1000  
 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<Integer> PrintFromTopToBottom(TreeNode root) {
17         
18         Queue<TreeNode> queue=new LinkedList<>();
19         queue.offer(root);
20         ArrayList<Integer> list=new ArrayList<>();
21         if (root==null) return list;
22         while (!queue.isEmpty()) {
23             int size=queue.size();
24             for (int i=0;i<size;i++) {
25                 TreeNode tree=queue.poll();
26                 list.add(tree.val);
27                 if (tree.left!=null) queue.offer(tree.left);
28                 if (tree.right!=null) queue.offer(tree.right);
29             }
30         }
31         return list;
32     }
33 }

思路:队列实现层序遍历。

 

题2:

JZ33 二叉搜索树的后序遍历序列

 

描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。   数据范围: 节点数量 0 \le n \le 10000≤n≤1000 ,节点上的值满足 1 \le val \le 10^{5}1≤val≤105 ,保证节点上的值各不相同
要求:空间复杂度 O(n)O(n) ,时间时间复杂度 O(n^2)O(n2)
提示: 1.二叉搜索树是指父亲节点大于左子树中的全部节点,但是小于右子树中的全部节点的树。 2.该题我们约定空树不是二叉搜索树 3.后序遍历是指按照 “左子树-右子树-根节点” 的顺序遍历 4.参考下面的二叉搜索树,示例 1 2022-2-20 剑指offer day10  
 1 public class Solution {
 2     public boolean VerifySquenceOfBST(int [] sequence) {
 3         return dfs(sequence,0,sequence.length-1) && sequence.length!=0;
 4     }
 5     
 6     
 7     public boolean dfs(int[] arr,int start,int end){
 8         if (start>=end) return true; // 说明只有root一个节点
 9         int root=arr[end];
10         int index=end-1;
11         while (index>=start && arr[index]>root) index--;
12         for (int i=start;i<=index;i++) {
13             if (arr[i]>root) return false;
14         }
15         return dfs(arr,start,index) && dfs(arr,index+1,end-1);
16     }
17 }

思路: 递归 找到左子树和右子树判断合法性,再递归判断左右子树是否为搜索树。

上一篇:GRPC 的验证器


下一篇:RabbitMQ使用 prefetch_count优化队列的消费,使用死信队列和延迟队列实现消息的定时重试,golang版本