博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer第三天
阅读量:5908 次
发布时间:2019-06-19

本文共 3444 字,大约阅读时间需要 11 分钟。

21.栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

【解题思路】:设计一个辅助栈,如果下一个弹出的数字是辅助栈的栈顶,则弹出,如果不是栈顶,则继续将压入序列压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止;如果所有数字都压入辅助站,栈顶仍然不是欲弹出的数字,则该序列不可能是一个弹出序列。

import java.util.Stack;public class Solution {    public boolean IsPopOrder(int [] pushA,int [] popA) {        if(pushA == null||popA == null||pushA.length!=popA.length) return false;        Stack
stack = new Stack<>(); int j = 0; for(int i = 0 ;i

22.从上往下打印二叉树

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

Java知识点:

  1. 返回长度:
    1. String.length();String字符串用length()方法会返回其长度。
    2. Array.length;数组有length属性,直接数组名点length就可以取到。
    3. ArrayList.size()方法的会返回其长度。
  2. ArrayList 操作:
    get(),add(),remove()
    You need to use the get() method to get the element at a particular index from an ArrayList. You can't use [] to get the element at a particular index, in an arraylist. Its possible only for arrays and your files is not an array, but an ArrayList.
/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/import java.util.ArrayList;/**用arraylist模拟一个队列来存储相应的TreeNode*/public class Solution {    ArrayList
result = new ArrayList<>(); ArrayList
temp = new ArrayList<>(); public ArrayList
PrintFromTopToBottom(TreeNode root) { if(root == null) return result; temp.add(root); while(temp.size() != 0){ TreeNode node = temp.remove(0); result.add(node.val); if(node.left!=null) temp.add(node.left); if(node.right!=null) temp.add(node.right); } return result; }}

23.二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出True,否则输出False。假设输入的数组的任意两个数字都互不相同。

public class Solution {    public boolean VerifySquenceOfBST(int [] sequence) {        if(sequence == null || sequence.length == 0) return false;        int start = 0,end = sequence.length-1;        return isSearchTree(sequence,start,end);    }    public boolean isSearchTree(int [] sequence,int start,int end){        if(end==start) return true;        int root = sequence[end];        int index = end;        for(int i = start;i
root){ index = i; break; } } for(int i = index;i

24.二叉树中和为某一值的路径

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

【解题思路】:因为根结点和叶子结点一定在路径中,而且路径开始一定是跟结点,使用前序遍历遍历二叉树,每经过一个结点减小target的值,直至找到使target=0的叶子结点,即为路径,每次回退,需要删除路径中最后一个结点。

import java.util.ArrayList;/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    private ArrayList
> allPath = new ArrayList<>(); private ArrayList
path = new ArrayList<>(); public ArrayList
> FindPath(TreeNode root,int target) { if(root == null) return allPath; target -= root.val; path.add(root.val); if(target == 0&& root.left == null&&root.right == null) allPath.add(new ArrayList
(path)); else{ FindPath(root.left,target); FindPath(root.right,target); } path.remove(path.size()-1); return allPath; }}

转载于:https://www.cnblogs.com/guoyaohua/p/8319094.html

你可能感兴趣的文章
两台Linux主机,通过GRE隧道并且PAT访问对方网络
查看>>
某度质量部测试开发面试题5(未完待续)
查看>>
添加 Windows 7 摄像头 并将其添加到 我的电脑 资源管理器中
查看>>
SQL Server 2016 RC0 发布
查看>>
链接自动化测试工具xenu
查看>>
令人疑惑的defaultValueAttribute
查看>>
AWR Wait Class
查看>>
一帆风顺中的煎熬,《腾讯传》读后感
查看>>
Java字符串"学java"占多少内存空间
查看>>
三星i917官方wp7.8刷机、越狱、防锁全过程
查看>>
区块链初始化与实现POW工作量证明
查看>>
vsftp安装与下载
查看>>
win10系统80端口被占用怎么办
查看>>
Puppet 实验十一 ubunto 安装 puppet-dashboard 仪表盘
查看>>
对《微营销》与《大数据营销》的读后思考
查看>>
Windows 2008 – Error 2147943712 during task creation
查看>>
hadoop(2.5,2.6) HDFS偶发性心跳异常以及大量DataXceiver线程被Blocked故障处理分享
查看>>
闲睱小记 ——于世
查看>>
Zabbix应用之Server/Agent部署
查看>>
Python从菜鸟到高手(13):分片(Slicing)
查看>>