問題描述:
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的 min 函式(時間複雜度應為 o(1))。
注意:保證測試中不會當棧為空的時候,對棧呼叫 pop()或者 min()或者 top()方法。
const datastack = ; // 棧
const minstack = ; // 儲存棧中最小的元素
function push(node) else if (node <= minstack[length - 1])
}function pop()
return datastack.pop();
}function top()
function min()
問題描述:
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列 1,2,3,4,5 是某棧的壓入順序,序列 4,5,3,2,1 是該壓棧序列對應的乙個彈出序列,但 4,3,5,1,2 就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
解題思路:需要乙個輔助棧,來模擬出入棧的過程。演算法流程如下:
最後,檢查輔助棧和彈出佇列是否均為空。
時間複雜度是 o(n^2),空間複雜度是 o(n)。
function ispoporder(pushv, popv) else
}} return popv.length === 0 && stack.length === 0;
}
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。空二叉樹返回 false。
/* function treenode(x) */
function printfromtoptobottom(root)
nodes.push(root);
while (nodes && nodes.length > 0)
if (node.right)
} return values;
}
問題描述:
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出 true,否則輸出 false。假設輸入的陣列的任意兩個數字都互不相同。
/*
在二叉搜尋樹中:
1.若任意結點的左子樹不空,則左子樹上所有結點的值均不大於它的根結點的值。
2. 若任意結點的右子樹不空,則右子樹上所有結點的值均不小於它的根結點的值。
3.任意結點的左、右子樹也分別為二叉搜尋樹。
*/function verifysquenceofbst(sequence)
return __verifysquenceofbst(sequence);
}function __verifysquenceofbst(sequence) //left的數量是i,0 -> i-1
for (let j = i; j < len - 1; j++)
} return (
__verifysquenceofbst(sequence.slice(0, i)) &&
__verifysquenceofbst(sequence.slice(i, len - 1))
);}
問題描述:
輸入一顆二叉樹的根節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的 list 中,陣列長度大的陣列靠前)
/* function treenode(x) */
function findpath(root, expectnumber)
dfsfind(root, expectnumber, , 0, result);
return result;
}function dfsfind(root, expectnumber, path, sum, result)
if (root.left !== null)
if (root.right !== null)
path.pop();
}
劍指offer 演算法 (舉例讓抽象具體化)
題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min,push,pop的時間複雜度都是o 1 解析 首先是乙個棧,這個棧已經是最常見的那種,我們需要改造它使它能夠在o 1 時間內返回最小元素,剛開始的思路是往棧裡面新增乙個元素放在stack的頂部,表示...
劍指offer 演算法 (舉例讓抽象具體化)
題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。解析 從上往下遍歷 root結點 左結點 右結點 每遍歷乙個依次存入佇列 由佇列的先進先出 依次便可逐層存結點入陣列中 struct treenode class solution return array 題目描述 輸入乙個整數陣列,...
舉例讓抽象具體化 從上往下列印出二叉樹
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 使用佇列儲存,每次把佇列裡的原來內容進行出佇列操作。接下來把每個元素的非空左右子節點進入佇列。即可以得到每層的遍歷。python實現 an highlighted block from collections import deque cl...