C 二叉樹操作集錦

2021-09-02 15:03:58 字數 3152 閱讀 9223

* 測試用例:

** 10

* / \

* 5 -3

* / \ \

* 3 2 11

* / \ \

* 3 -2 1

*****************/

// binarytree.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#include#include#includeusing namespace std;

templatestruct treenode ;

};//1.生成二叉樹

int index = 0;

templatetreenode*creatbinarytree(vector&arr)

else

return proot;

}//2.前序列印

templatevoid preprint(treenode*proot)

}//3.非遞迴前序列印(non-recursion)

templatevoid nonre_preprint(treenode*proot)

else

}}//4.中序列印

templatevoid midprint(treenode*proot)

}//5.非遞迴中序列印(non-recursion)

templatevoid nonre_midprint(treenode*proot)

else

}}//6.後序列印

templatevoid postprint(treenode*proot)

}//7.非遞迴後序列印(non-recursion)

templatevoid nonre_postprint(treenode*proot)

p = stree.top();

if (p->right && p->right != last)

else

}}//8.非遞迴後序列印(non-recursion2);參考:

templatevoid nonre_postprint2(treenode*proot)

if (p->right)

}while (!spost.empty()) }

//9.按層列印

templatevoid layerprint(treenode*proot)

if (temp->right != null)

if (last == temp) }}

//10.翻轉二叉樹(遞迴)

templatetreenode* reverse(treenode*proot)

if(proot->left)

reverse(proot->left);

if (proot->right)

reverse(proot->right);

return proot;

}//11.(reverse2):使用佇列,按層遍歷

templatetreenode* reverse2(treenode*proot)

if (p->right != null)

}return proot;

}//12.(reverse3):使用棧,按層遍歷

templatetreenode* reverse3(treenode*proot)

if (p->right != null)

}return proot;

}//13.二叉樹最大深度

templateint maxdepth(treenode*proot)

int main()

; vectorarr1 = ;

//treenode*root = creatbinarytree(arr);

treenode*root = creatbinarytree(arr1);

cout << "前序:"<< endl;

preprint(root);

cout << endl;

cout << "非遞迴前序:" << endl;

nonre_preprint(root);

cout << endl;

cout << "中序:" << endl;

midprint(root);

cout << endl;

cout << "非遞迴中序:" << endl;

nonre_midprint(root);

cout << endl;

cout << "後序:" << endl;

postprint(root);

cout << endl;

cout << "非遞迴後序:" << endl;

nonre_postprint(root);

cout << endl;

cout << "非遞迴後序2:" << endl;

nonre_postprint2(root);

cout << endl;

cout << "按層列印:" << endl;

layerprint(root);

cout << endl;

reverse(root);

cout << "按層列印(翻轉):" << endl;

layerprint(root);

cout << endl;

reverse2(root);

cout << "按層列印(翻轉使用queue):" << endl;

layerprint(root);

cout << endl;

reverse3(root);

cout << "按層列印(翻轉使用stack):" << endl;

layerprint(root);

cout << endl;

int depth = maxdepth(root);

cout << "最大深度:" << depth << endl;

二叉樹題目集錦1

題目1 輸入乙個整數和一棵二叉樹。從樹的根節點開始往下訪問一直到葉節點所經過的所有節點形成一條路徑。列印出和輸入整數相等的所有路徑。思路 當訪問到某一節點時,把該節點新增到路徑上,並累加當前節點的值。如果當前節點為葉節點並且當前路徑的和剛好等於輸入的整數,則當前的路徑符合要求,我們把它列印出來。如果...

二叉樹操作

最近在溫習資料結構,把書中的 寫了一遍,下面是二叉樹的基本操作,包括 1 四種遍歷二叉樹的方法 前序遍歷 中序遍歷 後序遍歷和層序遍歷,其中又包括了遞迴的和非遞迴 2 兩種建立二叉樹的方法 根據二叉樹的前序和中序序列建立二叉樹和根據二叉樹的中序後序序列建立二叉樹。1.二叉樹的儲存結構 headfil...

二叉樹操作

本文章主要包括了以下內容 建立二叉樹類。二叉樹的儲存結構使用鍊錶。供操作 前序遍歷 中序遍歷 後序遍歷 層次遍歷 計算二叉樹結點數目 計算二叉樹高度。接收鍵盤錄入的二叉樹前序序列和中序序列 各元素各不相同 輸出該二叉樹的後序序列。下面是c include include include using ...