打印折痕方向(二叉树应用)
生活随笔
收集整理的這篇文章主要介紹了
打印折痕方向(二叉树应用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請把一段紙條豎著放在桌子上,然后從紙條的下邊向上方對折1次,壓出折痕后展開。此時折痕是凹下去的,即折痕突起的方向指向紙條的背面。如果從紙條的下邊向上方連續對折2次,壓出折痕后展開,此時有三條折痕,從上到下依次是下折痕、下折痕和上折痕。給定一個輸入參數N,代表紙條都從下邊向上方連續對折N次,請從上到下打印所有折痕的方向。
例:
N=1時,打印:down
N=2時,打印:down down up
這道題可以先拿個紙條折一下試試(略),會發現其中的規律:
第一次折 折痕記為1凹
第二次折 折痕記為2凹,2凸
第三次折。。。。。
折完之后可以發現,每折一次,前一次的折痕上面一定會多一條凹痕,下面會多一條凸痕,由此折痕不斷增多,若想打印折痕方向,則我們可以將這個紙條橫過來,會發現這個紙條折痕的打印順序和二叉樹的中序遍歷順序是一樣的,由此我們可以借用二叉樹中序遍歷的思想,來將所有折痕方向打印出來;
代碼如下:
#include<iostream> #include<cstring> using namespace std;void printAllflods(int N); void printprocess(int i,int N,bool TF);int main() {int N=3;printAllflods(N);return 0; } void printAllflods(int N) {printprocess(1,N,true); } void printprocess(int i,int N,bool TF) {if(i>N)return ;printprocess(i+1,N,true);//先打印上面的凹痕(即左子樹) string s=TF?"down":"up";cout<<s<<" ";//再打印中間的痕跡(即中間節點),TF為true則為凹痕down,為false則是凸痕up printprocess(i+1,N,false); //最后打印下面的凸痕 (即右子樹) }總結
以上是生活随笔為你收集整理的打印折痕方向(二叉树应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 队列化栈栈化队列(力扣)
- 下一篇: 最大搜索二叉子树大小(树形dp)