我:(這可難不倒我)
先訪問根節點,後依次訪問左孩子和右孩子
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...