提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
这三种方法均由递归实现
零.手搓一颗二叉树
BTNode* CreatBinaryTree()
{
BTNode* node1 = BuyNode(1);
BTNode* node2 = BuyNode(2);
BTNode* node3 = BuyNode(3);
BTNode* node4 = BuyNode(4);
BTNode* node5 = BuyNode(5);
BTNode* node6 = BuyNode(6);
node1->left = node2;
node1->right = node4;
node2->left = node3;
node4->left = node5;
node4->right = node6;
return node1;
}
一、前序遍历
先访问左子树,再访问右子树,如果遇到空节点,打印NULL,简写为“N”
节点的访问顺序如下
代码验证:
//先序遍历
void PreBTree(BTNode*root)
{
if (root == NULL)
{
printf("N ");
return;
}
printf("%d ", root->data);
PreBTree(root->left);
PreBTree(root->right);
}
和预期一样
二、中序遍历
中序遍历的规则是先访问左子树,根,右子树
访问顺序如下:
代码验证:
void OrdBTree(BTNode* root)
{
if (root == NULL)
{
printf("N ");
return;
}
OrdBTree(root->left);
printf("%d ", root->data);
OrdBTree(root->right);
}
三.后序遍历
访问规则:
左子树,右子树,根
代码验证
void PastBTree(BTNode* root)
{
if (root == NULL)
{
printf("N ");
return;
}
PastBTree(root->left);
PastBTree(root->right);
printf("%d ", root->data);
}
总结
这就是二叉树的三种遍历方法,如有问题,欢迎交流。