二叉树的创建以及三种遍历操作
c++实现
// An highlighted block
#include<iostream>
using namespace std;
class Node
{
public:
int value;
Node*left;
Node*right;
Node(int v)
{
value=v;
left=NULL;
right=NULL;
}
};
先序遍历
// An highlighted block
void pre(Node*head)
{
if(head==NULL)
{
return;
}
cout<<head->value<<" ";
pre(head->left);
pre(head->right);
}
中序遍历
// An highlighted block
void mid(Node*head)
{
if(head==NULL)
{
return;
}
mid(head->left);
cout<<head->value<<" ";
mid(head->right);
}
后序遍历
// An highlighted block
void post(Node*head)
{
if(head==NULL)
{
return;
}
post(head->left);
post(head->right);
cout<<head->value<<" ";
}
下面介绍一下非递归版实现三种遍历方式
先序遍历
// An highlighted block
#include<Node.h>
#include<iostream>
using namespace std;
#include<stack>
void pre(Node*head)
{
stack<Node*>s;
s.push(head);
while(!s.empty())
{
head=s.top();
s.pop();
cout<<head->value<<" ";
if(head->right!=NULL)
{
s.push(head->right);
}
if(head->left!=NULL)
{
s.push(head->left);
}
}
}
中序遍历
// An highlighted block
void mid(Node*head)
{
stack<Node*>s;
while(!s.empty()||head!=NULL)
{
if(head!=NULL)
{
s.push(head);
head=head->left;
}
else
{
head=s.top();
s.pop();
cout<<head->value<<" ";
head=head->right;
}
}
}
…
[1]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
[2]: https://mermaidjs.github.io/
[3]: https://mermaidjs.github.io/
[4]: http://adrai.github.io/flowchart.js/