ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-2-20 剑指offer day10

2022-02-20 10:35:09  阅读:128  来源: 互联网

标签:index 20 val int public day10 2022 root 节点


题1:

JZ32 从上往下打印二叉树

描述

不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。 数据范围: 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  
 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 }

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

标签:index,20,val,int,public,day10,2022,root,节点
来源: https://www.cnblogs.com/benbicao/p/15914925.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有