二叉樹的前中後序遍歷
1.題目
給你二叉樹的根節點 root ,返回它節點值的 前序,中序,後序 遍歷。
這三種遍歷的思想是一樣的,只不過是前後順序的差別而已,下面將以前序為例進行一下介紹,其餘的會給出程式碼;
2.前序解法
2.1獲得元素個數
int GetSize(struct TreeNode* root)//獲得元素的個數
{
if(root==NULL)
return 0;
return GetSize(root->left)+GetSize(root->right)+1;//左節點+右節點+1
}
2.2填入資料
2.3整體程式碼
int GetSize(struct TreeNode* root)//獲得元素的個數
{
if(root==NULL)
return 0;
return GetSize(root->left)+GetSize(root->right)+1;//左節點+右節點+1
}
void Traversal(int *arr,struct TreeNode* root,int *count)//遍歷往陣列裡面填入資料
{
if(root!=NULL)
{
arr[*count]=root->val;//填入根節點
(*count)++;
Traversal(arr,root->left,count);
Traversal(arr,root->right,count);//填入右節點
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size=GetSize(root);
int *arr=(int *)malloc(sizeof(int)*size);
int count=0;
Traversal(arr,root,&count);//注意傳地址進去
*returnSize=count;
return arr;
}
3.中序
解題思想都是一樣的
int GetSize(struct TreeNode* root)
{
if(root==NULL)
return 0;
return GetSize(root->left)+GetSize(root->right)+1;
}
void Traversal(int *arr,struct TreeNode* root,int *count)
{
if(root)
{
//先賦值左孩子然後根節點再右孩子節點
Traversal(arr,root->left,count);
arr[(*count)++]=root->val;
Traversal(arr,root->right,count);
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int size=GetSize(root);
int *arr=(int *)malloc(sizeof(int)*size);
int count=0;
Traversal(arr,root,&count);
*returnSize=count;
return arr;
}
4.後序
int GetSize(struct TreeNode* root)
{
if(root==NULL)
return 0;
return GetSize(root->left)+GetSize(root->right)+1;
}
void Traversal(int *arr,struct TreeNode* root,int *count)
{
//先左再右再根
if(root)
{
Traversal(arr,root->left,count);
Traversal(arr,root->right,count);
arr[(*count)++]=root->val;
}
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
int size=GetSize(root);
int *arr=(int *)malloc(sizeof(int)*size);
int count=0;
Traversal(arr,root,&count);
*returnSize=count;
return arr;
}
相關文章
- python-二叉樹:前、中、後、層序遍歷Python二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 二叉搜尋樹的後序遍歷序列
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 二叉樹的層序遍歷二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 【模板題】- 145. 二叉樹的後序遍歷二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- LeeCode-94. 二叉樹的中序遍歷二叉樹
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- LeetCode-106-從中序與後序遍歷序列構造二叉樹LeetCode二叉樹
- 程式碼隨想錄演算法訓練營day14 | leetcode 144. 二叉樹的前序遍歷、145. 二叉樹的後序遍歷、94. 二叉樹的中序遍歷演算法LeetCode二叉樹
- 中序線索二叉樹的建立與遍歷二叉樹
- 二叉樹(BST)中序遍歷的三種方法二叉樹
- 【模板題】- 94. 二叉樹的中序遍歷二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- JZ-023-二叉搜尋樹的後序遍歷序列
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- L2_006樹的遍歷(後序+中序->前序/層序)
- 中序線索二叉樹的構造和遍歷二叉樹
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹