二叉樹應用高階之摺紙(二叉樹的右根左遍歷)

2021-09-07 10:04:29 字數 1082 閱讀 8719

前面我們講了二叉樹的幾種基礎遍歷方式——先序遍歷(根左右)、中序遍歷(左根右)、後序遍歷(根左右)。我們發現三種遍歷都是左比右先遍歷的。如果想讓右子樹比左子樹先遍歷呢?其實是一樣的,只不過是遍歷乙個樹結點時,處理右兒子的順序在左兒子之前罷了,至於當前結點則按照需求來放在前、中、後三個位置。

摺紙遊戲:拿一張紙條,從下往上對折一次,展開,發現摺痕是向下的;然後在對折依次的基礎上再對折一次,發現從上往下的摺痕依次是「下下上」。

問紙條對折n次後展開,求從上往下各條摺痕的方向?

分析:對折其實是在最近一次對折產生的摺痕的上下分別再產生一條摺痕,並且是上面一條是「向下的」,下方產生的摺痕是「向上的」。我們按照摺紙的次數來記錄當前次摺疊產生的摺痕,可以得到一棵滿二叉樹:根節點是下,每個結點的左兒子是上,右兒子是下

那麼從上往下列印紙條的摺痕方向,其實就是按照「右——中——左」的順序去遍歷上面的二叉樹。

不需要建立二叉樹,我們只需在遞迴遍歷時,根據遞迴順序(右、中、左)傳進不同的方向值即可。 

public string fold*****(int

n)

return

res;

}public

void post_in_pre(int n,string val,arraylistorder)

//對當前次摺疊產生的右兒子是down

post_in_pre(n-1,"down",order);

//當前摺疊的摺痕由上一次摺疊時傳進來的值決定

order.add(val);

//當前次摺疊產生的左兒子是up

post_in_pre(n-1,"up",order);

}

(這裡注意:遞迴n次要終止,否則會出現越界的情況。所以以後發現越界時檢查陣列下標越界沒有發現錯誤的話,要從遞迴函式的遞迴邊界找疏漏)。

折紙條 二叉樹

牛客網演算法課題目 請把紙條豎著放在桌 上,然後從紙條的下邊向上 對折,壓出摺痕後再展 開。此時有1條摺痕,突起的 向指向紙條的背 這條摺痕叫做 下 摺痕 突起的 向指向紙條正 的摺痕叫做 上 摺痕。如果每次都從下邊向上 對折,對折n次。請從上到下計算出所有摺痕的 向。給定折的次數n,請返回從上到下...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...