1、先序遍历
void preorder(Node* root)
{
if(root==NULL) return;
printf("%d\n",root->data);
preorder(root->lchild);
preorder(root->rchild);
}
2、中序遍历
void inorder(Node* root)
{
if(root==NULL) return;
inorder(root->lchild);
printf("%d\n",root->data);
inorder(root->rchild);
}
3、后序遍历
void postorder(Node* root)
{
if(root==NULL) return;
postorder(root->lchild);
postorder(root->rchild);
printf("%d\n",root->data);
}
4、层序遍历
void LayerOrder(Node* root)
{
queue<Node*> q; //Node*: 该类型变量存储空间内存放的是Node类型变量的地址
while(!q.empty())
{
Node* now=q.front();
q.pop();
printf("%d",now->data);
if(now->lchild!=NULL) q.push(now->lchild);
if(now->rchild!=NULL) q.push(now->rchild);
}
}
5、计算每个节点的层次【层序遍历】
struct Node
{
int data;
int layer;
Node* lchild;
Node* rchild;
}
void LayerOrder(Node* root)
{
queue<Node*> q;
root->layer=1;
q.push(root);
while(!q.empty())
{
Node* now=q.front();
q.pop();
printf("%d ",now->data);
if(now->lchild!=NULL)
{
now->lchild->layer=now->layer+1;
q.push(now->lchild);
}
if(now->rchild!=NULL)
{
now->rchild->layer=now->layer+1;
q.push(now->rchild);
}
}
}