二叉樹的前中後序遍歷
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二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 二叉樹的層序遍歷二叉樹
- 層序遍歷二叉樹二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- [資料結構] 根據前中後序遍歷中的兩種構造二叉樹資料結構二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 【二叉樹】前中序求後序,中後序求前序二叉樹
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- 中序線索二叉樹的建立與遍歷二叉樹
- 二叉樹(BST)中序遍歷的三種方法二叉樹
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- 資料結構 排序二叉樹(BST) 插入刪除查詢 中序遍歷 銷燬(後序遍歷)資料結構排序二叉樹
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 關於二叉樹的前序遍歷、中序遍歷、刪除元素、插入元素二叉樹
- 3143 二叉樹的序遍歷二叉樹
- 中序線索二叉樹的構造和遍歷二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹