首先是二叉树的定义,二叉树的定义可以是数组但是数组存在浪费空间的现象(若一个节点没有左孩子,或者是右孩子不存在)那么这个内存就浪费了,所以可以用链表 来定义一个二叉树;
struct TreeNode
{
TreeNode *leftchilds;
TreeNode *rigtchilds;
char elem;
};
1.前序遍历:先访问根节点——左子树——右子树。
2.中序遍历:先访问左子树——根节点——右子树,按照这个顺序。
3.后序遍历:和前面差不多,先访问树的左子树——右子树——根节点。按层遍历:把一棵树从上到下,从左到右依次写出来。(来自网页解释)
前序遍历的代码
void Pre_visit(TreeNode *root)
{
if(!root)
return;
cout<<root->elem;
Pre_visit(root->leftchilds);
Pre_visit(root->rigtchilds);
}
中序遍历(其实就是前序遍历的输出位置换了)
void In_visit(TreeNode *root)
{
if(!root)
return;
In_visit(root->leftchilds);
cout<<root->elem;
In_visit(root->rigtchilds);
}
后序遍历
void End_visit(TreeNode *root)
{
if(!root)
return;
End_visit(root->leftchilds);
End_visit(root->rigtchilds);
cout<<root->elem;
}