题1:
JZ32 从上往下打印二叉树
描述
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。 数据范围: 0<=节点总数<=1000 -1000<=节点值<=10001 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 }
思路: 递归 找到左子树和右子树判断合法性,再递归判断左右子树是否为搜索树。