一个普通二叉树的遍历

Posted 立体风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个普通二叉树的遍历相关的知识,希望对你有一定的参考价值。

要点:二叉树遍历,要针对基本图形的遍历,先序(NLR),中序(LNR),后序(LRN),且往上看,它是某节点的左子,但往下看,它可能还是某节点的根,这时就要继续往下找,直到找到没有子(也就是叶子)时,左子,才是真正的左子,自己体会。

图形:

程序:

#include<stdio.h>
#include<stdlib.h>

struct node{
    char data;
    struct node* left;
    struct node* right;
};
struct node* newNode(char data){
    struct node* node = (struct node*)malloc(sizeof(struct node));
    node->data=data;
    node->left=NULL;
    node->right=NULL;
    return node;
}
void printPostorder(struct node* node){
    if(node == NULL)
        return;
    printPostorder(node->left);
    printPostorder(node->right);
    printf("%c ",node->data);
}
void printInorder(struct node* node){
    if(node==NULL){
        return;
    }
    printInorder(node->left);
    printf("%c ",node->data);
    printInorder(node->right);
}
void printPreorder(struct node* node){
    if(node==NULL){
        return;
    }
    printf("%c ",node->data);
    printPreorder(node->left);
    printPreorder(node->right);
}
int main(){
    struct node *root=newNode(\'A\');
    root->left=newNode(\'B\');
    root->right=newNode(\'C\');
    root->left->left=newNode(\'D\');
    root->right->left=newNode(\'F\');
    root->right->right=newNode(\'H\');
    root->left->left->right=newNode(\'E\');
    root->right->right->left=newNode(\'I\');
    root->right->right->right=newNode(\'G\');
    printf("\\nPreorder raversal of binary tree is \\n");
    printPreorder(root);
    printf("\\nInorder raversal of binary tree is \\n");
    printInorder(root);
    printf("\\nPostorder raversal of binary tree is \\n");
    printPostorder(root);
    return 0;
}

输出:

Preorder raversal of binary tree is
A B D E C F H I G
Inorder raversal of binary tree is
D E B A F C I H G
Postorder raversal of binary tree is
E D B F G I H C A

 

以上是关于一个普通二叉树的遍历的主要内容,如果未能解决你的问题,请参考以下文章

植物大战 二叉树 概念——C

日常学习随笔-用链表的形式实现普通二叉树的新增查找遍历(前中后序)等基础功能(侧重源码+说明)

二叉树的遍历

二叉树的非递归遍历怎么写?

二叉树的创建和遍历

二叉树11:完全二叉树的节点个数