深度優(yōu)先等效于先序遍歷,根左右的順序,常常采用遞歸或者堆棧(后進先出)實現(xiàn),所以我們先把右子樹放入棧中,后放左子樹,這樣所有的左子樹訪問完了才會進行右子樹。
void deepfirst(TreeNode* root){ stack<TreeNode*> s; s.push(root); while(!s.empty()){ TreeNode* temp=s.top(); s.pop(); cout<<temp->val<<endl; if(temp->right) s.push(temp->right); if(temp->left) s.push(temp->left); }}廣度優(yōu)先相當于層級遍歷,常常用隊列(先進先出)實現(xiàn),我們從左向右層級遍歷,就先把左節(jié)點放入,訪問左節(jié)點時,也會把左節(jié)點的下層節(jié)點按照從左向右放入,左節(jié)點出隊列,就訪問了右節(jié)點,再從左到右放入右子樹的下層節(jié)點。
void breadthfirst(TreeNode* root){ queue<TreeNode*> q; q.push(root); while(!q.empty()){ TreeNode* temp=q.front(); q.pop(); cout<<temp->val<<endl; if(temp->left) q.push(temp->left); if(temp->right) q.push(temp->right); }}
|
新聞熱點
疑難解答