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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法导论练习 10.4-5及12.1-3

發布時間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法导论练习 10.4-5及12.1-3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//算法導論10.4-5及12.1-3 //1. 10.4-5 //給定一個n節點的二叉樹,寫出一個O(n)時間的非遞歸過程,將該樹每個節點的關鍵 //字輸出。要求除該樹本身的存儲空間外只能使用固定量的額外存儲空間,且在過程中 //不得修改該樹,及時暫時的修改也不允許。 //2. 12.1-3 //設計一個執行中序遍歷的非遞歸程序(提示:一種容易的方法是使用棧作為輔助數據 //結構;另一種比較復雜但比較簡潔的做法是不使用棧,但要假設能測試兩個指針是否 //相等。) struct tree {int val;tree *left,*right,*parent; };void print(tree *x) {cout<<x->val<<" "; } //最簡單的遞歸實現 void inorder_tree (tree *x) {if(!x) return;inorder_tree (x->left);print(x);inorder_tree (x->right); }//用棧輔助實習二叉樹非遞歸遍歷 //不需要使用父節點指針 stack<tree *> st; void inorder_tree_stack(tree* x) {while(x || !st.empty()) {//一路向左,不斷將當前節點壓入棧中while(x){st.push(x);x=x->left;}//取出棧頂元素,輸出,并遍歷其右節點x=st.top();st.pop();print(x);x=x->right;} } //非遞歸的中序遍歷樹,不用棧實現,但需要父節點指針 //一共有3種情況 //1. 訪問左孩子 //2. 訪問右孩子 //3. 如果是從右孩子返回,表明整棵子樹已訪問完,需要沿樹而上尋找父節點。 // 直到是從左孩子返回,或者訪問到根節點的父節點void inorder_tree_nostack(tree *x) {if(!x) return;tree *y=NULL;while(true){//訪問左孩子if(y != x->left){while(x->left) x=x->left;}print(x);//訪問右孩子if(x->right){x=x->right;continue;}//回溯do{y=x;x=x->parent;//訪問到根節點的父節點(NULL)if(!x) return;}while(y == x->right);} }

?

轉載于:https://www.cnblogs.com/blazebird/archive/2013/04/11/3015615.html

總結

以上是生活随笔為你收集整理的算法导论练习 10.4-5及12.1-3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。