題目描述:
樣例輸入:
abcbac
fdxeag
xdefag
樣例輸出:
bcaxedgaf
演算法實現;
/*遍歷二叉樹 */
//由二叉樹前序和中序序列得出後序遍歷序列
//遞迴思想 這個演算法真心不錯!
#include#includevoid getpost(char pre,char in,char post,int len)
} getpost(pre+1,in,post,i);
getpost(pre+i+1,in+i+1,post+i,len-i-1);
}int main()
fclose(stdin);
return 0;
}
特別注意:
1.在剛開始接觸樹的題目時,首先會想到建立一顆完整的樹結構,然後對其進行遍歷,插入等等,但是學習過別人的演算法之後發現,完全不用,只需根據二叉樹的思想,就可以用陣列直接解決;
2.本題中的遞迴演算法很好,傳遞位址,而非自己的想法,傳遞陣列邊界引數,每一次遞迴,都看做是乙個前序和中序序列,然後同樣的解決方法求得;
3.同樣的題目還有1113 求完全二叉樹某一子樹的結點總數,本題也可以用遞迴演算法,但是結果會超時,因此又要求助高人了,直接用乙個迴圈就實現了,題目和實現如下:
題目描述:
如上所示,由正整數1,2,3……組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。
比如,n = 12,m = 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹中共有4個結點。
輸入:
輸入資料報括多行,每行給出一組測試資料,包括兩個整數m,n (1 <= m <= n <= 1000000000)。最後一組測試資料中包括兩個0,表示輸入的結束,這組資料不用處理。
輸出:
對於每一組測試資料,輸出一行,該行包含乙個整數,給出結點m所在子樹中包括的結點的數目。
樣例輸入:
3 12
0 0樣例輸出: 4
演算法實現:
/* 二叉樹*/
//求完全二叉樹某一子樹的結點個數
//非遞迴演算法 採用遞迴超時
#includeint main()
if(left<=n)
printf("%d\n",num);
} //fclose(stdin);
return 0;
}
1078 二叉樹遍歷
1078 二叉樹遍歷.cpp 定義控制台應用程式的入口點。題目1078 二叉樹遍歷 時間限制 1 秒記憶體限制 32 兆特殊判題 否提交 5248解決 3142 題目描述 二叉樹的前序 中序 後序遍歷的定義 前序遍歷 對任一子樹,先訪問跟,然後遍歷其左子樹,最後遍歷其右子樹 中序遍歷 對任一子樹,先...
題目1078 二叉樹遍歷
題目描述 輸入 兩個字串,其長度n均小於等於26。第一行為前序遍歷,第二行為中序遍歷。二叉樹中的結點名稱以大寫字母表示 a,b,c.最多26個結點。輸出 輸入樣例可能有多組,對於每組測試樣例,輸出一行,為後序遍歷的字串。樣例輸入 abc bacfdxeag xdefag 樣例輸出 bca xedga...
題目1078 二叉樹遍歷
題目描述 輸入 兩個字串,其長度n均小於等於26。第一行為前序遍歷,第二行為中序遍歷。二叉樹中的結點名稱以大寫字母表示 a,b,c.最多26個結點。輸出 輸入樣例可能有多組,對於每組測試樣例,輸出一行,為後序遍歷的字串。樣例輸入 abc bacfdxeag xdefag 樣例輸出 bca xedga...