数据结构相关题
总结一些经典的数据结构的题目
爱吃小料的毛孩子
这个作者很懒,什么都没留下…
展开
-
二叉树前中后序的非递归遍历
目录一、前序非递归遍历二、中序非递归三、后序非递归我们先分析前序的非递归遍历,中序和后序与此类似。我们也可以用迭代的方式实现方法一的递归函数,两种方式是等价的,区别在于递归的时候隐式地维护了一个栈,而我们在迭代的时候需要显式地将这个栈模拟出来,其余的实现与细节都相同。一、前序非递归遍历前序遍历:根->左->右class Solution { public List<Integer> preorderTraversal(TreeNode r原创 2022-03-26 14:48:23 · 484 阅读 · 0 评论 -
平衡二叉树
一、题目二、思路1.一棵树要是平衡二叉树,那么它的每颗子树都要是平衡二叉树2.root左树的高度-右树的高度<=1时间复杂度:O(n^2),其中 n是二叉树中的节点个数。最坏情况下,二叉树是满二叉树,需要遍历二叉树中的所有节点,时间复杂度是 O(n)。对于节点 p,如果它的高度是 d,则 height(p) 最多会被调用 d 次(即遍历到它的每一个祖先节点时)。对于平均的情况,一棵树的高度 h 满足 O(h)=O(logn),因为 d≤h,所以总时间复杂度为 O(nlogn)。原创 2022-03-25 23:14:19 · 1113 阅读 · 0 评论 -
另一棵树的子树
一、题目二、思路1.先判断两棵树是不是两颗相同的树2.如果不是,那么分别判断subRoot是不是root的左子树或者右子树(换句话来说,就是,subRoot和root的左子树或右子树是不是同一颗树)三、代码实现class Solution { private boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null){ retur.原创 2022-03-24 23:38:37 · 281 阅读 · 0 评论 -
检查两棵树是否相同
目录一、题目二、思路三、代码实现一、题目二、思路1.如果两个二叉树都为空,则两个二叉树相同2.如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同3.如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同三、代码实现class Solution { public boolean isSameTree(TreeNode p, TreeNode q) {原创 2022-03-23 22:56:47 · 3586 阅读 · 0 评论 -
用栈实现队列
目录一、题目二、思路三、代码实现一、题目二、思路1.入队的时候统一入到第一个栈2.出队的时候统一出第二个栈的元素,如果第二个栈为空,那么就把第一个栈里面的所有元素导过来,然后再出栈顶元素三、代码实现class MyQueue { public Stack<Integer> stack1; public Stack<Integer> stack2; public MyQueue() { sta..原创 2022-03-20 13:13:54 · 277 阅读 · 0 评论 -
用队列实现栈
目录一、题目二、思路三、代码实现一、题目二、思路1.入栈的时候,入到不为空的队列,刚开始都为空指定入到一个队列2.入栈的时候,找到不为空的队列,出size-1个元素到另一个队列中,剩下的这个元素就是出栈的元素如图所示:三、代码实现class MyStack { private Queue<Integer> qu1; private Queue<Integer> qu2; public MyStack() {原创 2022-03-19 09:17:09 · 1238 阅读 · 0 评论 -
实现最小栈
一、题目二、思路三、代码实现class MinStack { private Stack<Integer> stack; private Stack<Integer> minStack; public MinStack() { stack = new Stack<>(); minStack = new Stack<>(); } public void .原创 2022-03-15 21:36:37 · 322 阅读 · 0 评论 -
有效的括号匹配
目录一、题目二、思路三、代码实现一、题目二、思路1.有三种考虑的方向:(1)(()左括号多(2)())右括号多(3)([)]左右括号不匹配2.使用栈来实现本题(1)如果遇到左括号就入栈(2)如果遇到右括号,就比较栈顶元素和当前的右括号是否匹配,如果匹配则出栈(3)因为栈当中存储的左括号,当遍历完整个字符串,栈还是不为空的,则左括号多,否则右括号多三、代码实现class Solution { public boolean isValid原创 2022-03-15 21:03:29 · 605 阅读 · 0 评论 -
栈的压入、弹出序列
一、题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。1. 0<=pushV.length ==popV.length <=10002. -1000<=pushV[i]<=10003.pushV的所有数字均不相同示例1输入:[1,...原创 2022-03-06 23:56:36 · 294 阅读 · 0 评论 -
逆波兰表达式
目录一、题目描述二、思路三、代码实现一、题目描述二、思路三、代码实现class Solution { public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<>(); for(int i = 0; i < tokens.length; i++){ String val = to.原创 2022-03-06 23:13:44 · 185 阅读 · 0 评论 -
Java顺序表之杨辉三角
目录一、题目二、思路三、代码实现一、题目二、思路三、代码实现import java.util.ArrayList;import java.util.List;class Solution{ public List<List<Integer>> generate(int numRows){ List<List<Integer>> ret = new ArrayList<>();..原创 2022-02-28 20:22:56 · 274 阅读 · 0 评论