騰訊面試官這樣問我二叉樹,我剛好都會

2021-10-03 20:29:19 字數 1985 閱讀 3878

我:(這可難不倒我)

先訪問根節點,後依次訪問左孩子和右孩子

void

preorder1

(btree bt)

//遞迴先根遍歷

preorder1

(bt->lchild)

;//依次訪問左右節點

preorder1

(bt->rchild);}

}

void

preorder2

(btree p)

//非遞迴先根遍歷 ,先訪問根節點,後依次訪問左孩子和右孩子

q[++top]

= p;

p = p->lchild;}if

(top !=-1)}}

先訪問左孩子,後依次訪問根節點和右孩子

void

inorder1

(btree bt)

//遞迴中序遍歷

inorder1

(bt->rchild)

;//先訪問右節點

}}

void

inorder2

(btree p)

//非遞迴中序遍歷,先訪問左孩子,然後訪問根節點,後訪問右孩子

if(top !=-1

) p = p->rchild;}}

}

先訪問左孩子孩子,後依次訪問右孩子和根節點

void

postorder1

(btree bt)

//後序遍歷

}}

void

postorder2

(btree p)

//非遞迴後序遍歷 ,先訪問左孩子,然後訪問右孩子,後訪問根節點

;while

(p !=

null

|| top !=-1

)while

(top !=-1

&& flag[top]==2

)}if(top !=-1)}}

我:……

沉默了幾秒,我(這可難不倒我):還有一種層序遍歷

從根開始,依次向下,對於每一層從左向右遍歷

//層序遍歷 

void

sequense

(btree bt)

//建立棧,依次將根節點,左孩子,右孩子壓棧 ,並列印棧頂元素

我:(這可難不倒我)

按層遍歷二叉樹, 從每層從左向右遍歷所有的結點

如果當前結點有右孩子, 但沒有左孩子, 那麼不是完全二叉樹

如果當前結點有左孩子但無右孩子, 那麼它之後的所有結點都必須為葉子結點,否則不是完全二叉樹

如果當前結點有左孩子和右孩子, 繼續遍歷

int

compnode

(btree g)

//判斷是否是完全二叉樹

else

//*p節點有左子樹

else

}else

//目前存在有左孩子的節點,不是完全二叉樹}}

}else

return tree_signal;

}

咱們玩歸玩,鬧歸鬧,別拿面試開玩笑。

二叉樹的遍歷雖然簡單,但遍歷方式多樣,也有遞迴演算法非遞迴演算法之分。一旦問到了,大家一定要回答全面,不要丟三落四,回答到點上。二叉樹相關演算法題,在面試**現的次數非常非常多,大家面試前要把二叉樹等資料結構的基礎打牢。

面試官問我 未來五年的職業規劃 我是這樣回答的

相信大多數求職者在面試的時候都會被問到過這個問題。實際面試時,hr和業務部門的面試考核維度不同,這也代表著公司評估乙個應聘者的能力不僅僅是技術能力,還可能是穩定性 溝通 價值觀等等綜合因素。簡單來說,hr無非是想知道你對自己的認知 你的個人規劃是否與公司發展方向一致?你能在公司幹幾年?本文將從以上三...

騰訊 二叉樹的最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 方法一 definition for a binary tree no...

2 判斷乙個二叉樹是否是二叉搜尋樹(騰訊面試題)

1.面試的時候當面試官提出來的時候,我立馬想到的就是基於前序遍歷的遞迴方法。但是這個方法在面試官給說乙個測試用例的時候就徹底傻眼了。這是乙個典型的反例。這也可能是大家最容易忽略的乙個地方。謹記!2.我們利用當前節點是左子樹的最大值,是右子樹的最小值,採用基於前序遍歷的遞迴方式。public clas...