1.題目描述:定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數(時間複雜度應爲O(1))。
注意:保證測試中不會當棧爲空的時候,對棧調用pop()或者min()或者top()方法。
分析:首先棧的push()和pop()都是O(1);時間複雜度爲O(1)也就是說無論數據規模多大,都可以在一次計算後找到目標(不考慮衝突的話)。棧的特色是先進後出。
思路:可以考慮用空間來換取時間
import java.util.Stack;
public class test
{
private static Stack<Integer> stack = new Stack<Integer>();
private static Stack<Integer> minStack = new Stack<Integer>();
//入棧的話有值就入棧,棧空時都入 棧不空對min棧進行判斷保證棧頂元素一定是最小的
public void push(int node){
stack.push(node);
if(minStack.isEmpty()){
minStack.push(node);
}
else{
if (node<minStack.peek()){
minStack.push(node);
}else{
minStack.push(minStack.peek());
}
}
}
public void pop(){
minStack.pop();
stack.pop();
}
//stack的棧頂元素
public int top(){
return stack.peek();
}
//minstack的棧頂元素
public int min(){
return minStack.peek();
}
}
2.判斷二叉樹是否爲對稱的二叉樹
思路1:利用遞歸首先 要知道對稱的二叉樹是 節點的左孩子等於對稱節點的右孩子
boolean isDuichen(TreeNode leftRoot,TreeNode rightNode){
if(leftRoot == null&&rightRoot ==null)
return true;
if(leftRoot ==null || rightRoot == null)
return false;
if(leftRoot.val==rightRoot.val){
return (isDuichen(leftRoot.left,rightRoot.right )&&isDuichen(leftRoot.right,rightRoot.left))
}else{
return false;
}
}
boolean isSymmetrical(TreeNode pRoot){
if(pRoot==null){
return true;
}else
return isDuichen(pRoot.left,pRoot.right);
}
思路2:利用鏈表就是每次添加進去然後取出來進行比較 左子樹是從左往右加,右子樹是從優往左加 就是每加入一波取出判斷一波
boolean isSymmtrical(TreeNode pRoot){
if(pRoot == null)
return true;
LinkedList<TreeNode> leftlist = new LinkedList<>();
LinkedList<TreeNode> rightlist = new LinkedList<>();
leftlist.add(pRoot.left);
rightlist.add(pRoot.right);
while(!leftlist.isEmpty()&&!rightlist.isEmpty()){
TreeNode leftnode = leftlist.poll();
TreeNode rightnode = rightlist.poll();
//遍歷完列表表示檢查完畢
if(leftnode ==null&& rightnode==null)
return continue;
if(leftnode =null||rightnode)=null)
return false;
//用不等號因爲如果用等號的話會有可能沒有遍歷完畢
if(leftnode.val != rightnode.val)
return false;
//左子樹 從左往右加
leftlist.add(leftnode.left);
leftlist.add(leftnode.right);
//右子樹 從右往左加
rightlist.add(rightnode.right);
rightlist.add(rightnode.left);
}
return leftlist.isEmpty() && rightlist.isEmpty();
}