給定一顆二叉樹和其中的乙個節點,如何找出中序遍歷序列的下乙個節點?
樹中的節點除了有兩個分別指向左右子節點的指標,還有乙個指向父節點的指標。
binarytreenode*
getnext
(binarytreenode* pnode)
else
if(pnode-
>m_pparent !=
nullptr
) pnext = pparent;
}return pnext;
}
考察對二叉樹前序遍歷和中序遍歷的理解程度。
如果乙個節點有右子樹,那麼它的下乙個節點就是它的右子樹中最左子節點。
如果沒有右子樹,並且它還是它父節點的右子節點,我們沿著指向父親節點的指標一直向上遍歷,直到找到乙個它父親節點的左子節點的節點。
棧和佇列
棧是乙個常見的資料結構,作業系統會給每個執行緒建立乙個棧用來儲存函式呼叫時各個函式的引數、返回位址及臨時變數。後進先出
佇列先進先出,
面試題9:用兩個棧實現佇列
template
<
typename t>
class
cqueue
;
刪除 :當stack2不為空時,在stack2中的棧頂元素是最先進入佇列的元素,可以彈出。
當stack2為空時,我們把stack1中的元素逐個彈出並壓入stack2中。
template
void cqueue::(
const t& element)
template
<
typename t>t cqueue
::deletehead()
}if(stack2.
size()
==0)throw
newexception
("queue is empty");
t head = stack2.
top();
stack2.
pop();
return head;
}
用兩個佇列實現棧
我們考慮從棧中彈出乙個元素,根據棧的**先出的原則,我們可以把元素從q1中刪除,插入到q2中,在從q1中刪除最後乙個元素,這就相當於出棧
劍指刷題5
題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 push操作的話其實佇列和棧的邏輯是一樣的,入口就是第乙個stack,主要是pop的話要實現佇列的先進先出的邏輯,所以要將stack中已有的node依次pop然後馬上push到stack2中。class...
劍指offer刷題
面試題6 從尾到頭列印鍊錶 struct listnode class solution reverse res.begin res.end return res 替換空格class solution int newnumstr numstr numspace 2 if newnumstr leng...
劍指offer刷題
原題鏈結 動態規劃 class solution dp for int i 1 i len1 i else if p j 1 else return dp len1 len2 原題鏈結 數學推導 找規律 class solution else if n 3 2 return ipow 3 numso...