分为三种方式:
前序遍历,中序遍历,后序遍历
前序遍历:
先对28的节点进行访问,相当于访问左序,输出28;
之后访问其左孩子16,输出16;
再访问16的左孩子13,输出13;
之后访问13的左孩子,没有左孩子;
访问13的中序,不输出;
再访问13的右序,不输出;
再访问16的中序,16有右孩子;
访问16的右孩子,子节点22,输出22的值左序;
再访问22的中序,不输出;
访问22的右序值,不输出;
再访问16的右序,不输出;
再访问28的中序,28有右孩子;
访问28的有孩子30.。。。继续上述操作。
总结:在遍历的时候,先输出当前的值,然后访问左子树,然后访问右子树。
中序遍历:
中序遍历与前序遍历类似,只是在中序的时候,需要输出值,然后再访问右子树。并且,中序遍历能够将二叉树里的值按照从小到大排序。
示例如下:
后序遍历:
有了上述两种遍历,后序遍历的方式则与之类似,在访问右序的时候,则要输出值
后续遍历可以用来释放树的内存空间,遍历到一个树后,将节点销毁。
**//前序遍历
void preorder(Node* node)
{
if (node!=NULL)
{
std::cout << node->key << std::cout;
preorder(node->left);
preorder(node->right);
}
}
//中序遍历
void inorder(Node* node)
{
if (node!=NULL)
{
inorder(node->left);
std::cout << node->key << std::cout;
inorder(node->right);
}
}
//后序遍历
void postorder(Node* node)
{
postorder(node->left);
postorder(node->right);
std::cout << node->key << std::cout;
}
//释放树的空间,析构函数
void destroy(Node* node)
{
if (node!=NULL)
{
destroy(node->left);
destroy(node->right);
delete[] node;
count--;
}
}**