二叉树的递归遍历
递归按照这三要素来写
1.确定递归函数的参数和返回值:
确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型
2.确定终止条件:
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出
3.确定单层递归的逻辑:
确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程
二叉树的构建和遍历
/*************************************************************************
> File Name: 1-二叉树遍历.cpp
> Author:
> Mail:
> Created Time: Fri 22 Apr 2022 06:50:32 PM CST
************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
struct TreeNode
{
char data;
TreeNode*letf;
TreeNode*right;
TreeNode(int val):data(val),letf(nullptr),right(nullptr){}
} ;
class Solution {
public:
//1.先序遍历建立二叉树
TreeNode*Creat_tree()
{
char ch;
scanf("%c",&ch);
if(ch=='#')
{
return nullptr;
}
TreeNode*bt=new TreeNode(0);
if(bt==NULL)
{
return nullptr;
}
bt->data=ch;
bt->letf=Creat_tree();
bt->right=Creat_tree();
return bt;//返回根节点
}
//先序遍历
void preorderTraversal(TreeNode* root)
{
if(root==nullptr)
{
return ;
}
cout <<root->data;
preorderTraversal(root->letf);
preorderTraversal(root->right);
}
//中序遍历
void inorder(TreeNode*root)
{
if(root==nullptr)
{
return ;
}
inorder(root->letf);
cout<<root->data;
inorder(root->right);
}
//后序遍历
void postorder(TreeNode*root)
{
if(root==nullptr)
{
return ;
}
postorder(root->letf);
postorder(root->right);
cout<<root->data;
}
};
int main()
{
Solution s;
TreeNode*t= s.Creat_tree();
s.preorderTraversal(t);
cout<<endl;
s.inorder(t);
cout<<endl;
s.postorder(t);
cout<<endl;
return 0;
}