链式二叉树的三种遍历方式

链式二叉树是以链表为底层构建的二叉树。有四种方式可以遍历链式二叉树:分别是前序遍历,中序遍历,后序遍历


我们先了解链式二叉树的定义

//链式二叉树结点的定义
typedef struct BinaryTreeNode
{
    int data;              //我们这定义结点存储的数据类型为int
    struct BinaryTreeNode* left;//指向左孩子的指针
    struct BinaryTreeNode* right;//指向右孩子的指针
}BTNode;

每个二叉树的结点包含数据域和指针域。指针域往往是指向左孩子的指针和指向右孩子的指针。知道了链式二叉树的结构,我们就可以根据链式二叉树的结构而设计遍历函数了。对于树的结构,我们遍历往往需要递归来实现。

//前序遍历二叉树
void PreOrder(BTNode* root)
{
    //对于递归,我们先设计递归结束的条件
    if (root == NULL)
        return;
    //接下来是每次递归要做的操作。
    //对于前序遍历,它的遍历方式是根节点->左子树->右子树
    //所以我们先打印根节点的值    
    printf("%d", root->data);
    //其次是左子树
    PreOrder(root->left);
    //然后是右子树
    PreOrder(root->right);
}

代码就写完了。没错就是这么简单。递归的代码往往短小。同理,中序遍历也是同样的道理。

//前序遍历二叉树
void PreOrder(BTNode* root)
{
    //对于递归,我们先设计递归结束的条件
    if (root == NULL)
        return;
    //接下来是每次递归要做的操作。
    //对于前序遍历,它的遍历方式是根节点->左子树->右子树
    PreOrder(root->left);
    //打印根节点的值    
    printf("%d", root->data);
    //然后是右子树
    PreOrder(root->right);
}

后序遍历也是如此

//前序遍历二叉树
void PreOrder(BTNode* root)
{
    //对于递归,我们先设计递归结束的条件
    if (root == NULL)
        return;
    //接下来是每次递归要做的操作。
    //对于前序遍历,它的遍历方式是根节点->左子树->右子树
    PreOrder(root->left);
    //然后是右子树
    PreOrder(root->right);
    //打印根节点的值    
    printf("%d", root->data);
}

你可能感兴趣的:(数据结构,c语言,开发语言,链表,经验分享)