日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树三种遍历方式的非递归实现

發(fā)布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树三种遍历方式的非递归实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

樹的遞歸實現(xiàn)方式很簡單,下面介紹三種遍歷的非遞歸實現(xiàn)。

樹的遍歷有個特點,那就是在處理具體問題時,絕大多數(shù)情況下是在當前循環(huán)、或函數(shù)(或是子樹)的根節(jié)點來處理的,能夠注意到當前根節(jié)點是如何從上個根節(jié)點得來是關鍵。

1.先序遍歷

注意棧先進后出,先壓右節(jié)點。

void preOrder(node *root) {stack<node*>sk;sk.push(root);while(!sk.empty()){node *cur = sk.top();//棧頂元素是當前的結(jié)點sk.pop();//彈出棧頂元素cout<<cur->v<<" ";//visitif(cur->rson!=NULL) sk.push(cur->rson);if(cur->lson!=NULL) sk.push(cur->lson);} }

2.中序遍歷

//m1 void Inorder(node *root) {stack<node*>sk;while(!sk.empty() || root!=NULL){if(root == NULL){//左為空node *cur = sk.top();sk.pop();cout<<cur->v<<" ";//根遍歷完root = cur->rson;//遍歷右子樹}else{sk.push(root);root = root->lson;//先遍歷左子樹}} }//m2int kthSmallest(TreeNode* root, int k) {stack<TreeNode*> stack;while (root || stack.size() > 0) {while (root) {stack.push(root);root = root->left;}root = stack.top();stack.pop();k--;if (k == 0) {return root->val;}root = root->right;}return 0;}

3. 后序遍歷:創(chuàng)建兩個空棧,一個棧保存結(jié)點元素,一個棧保存輸出的答案??根右左到左右根

void posOrder(node *root) {stack<node*>sk; //保存結(jié)點元素stack<node*>res; //保存輸出的元素sk.push(root);while(!sk.empty()){//根右左node *cur = sk.top();sk.pop();res.push(cur);if(cur->lson != NULL) sk.push(cur->lson);if(cur->rson != NULL) sk.push(cur->rson);}while(!res.empty()){//左右根cout<<res.top()->v<<" ";res.pop();} }

總結(jié)

以上是生活随笔為你收集整理的二叉树三种遍历方式的非递归实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。