大家好,我是贤弟!
一、什么是二叉树遍历?
二叉树遍历算法是指按照一定的顺序,依次访问二叉树中的每个节点,且每个节点仅访问一次的过程。
常用的三种二叉树遍历算法为:
前序遍历、
中序遍历、
后序遍历。
前序遍历:先访问根节点,再递归地访问左子树和右子树;
中序遍历:先递归地访问左子树,再访问根节点,最后递归地访问右子树;
后序遍历:先递归地访问左子树和右子树,最后访问根节点。
二、二叉树遍历的原理
二叉树遍历算法的原理是基于二叉树的递归性质,即每个子树都可以看做一个完整的二叉树,可以通过递归来实现遍历。
具体实现方式为:
前序遍历:先访问根节点,然后递归地遍历左子树和右子树;
中序遍历:先递归地遍历左子树,然后访问根节点,最后递归地遍历右子树;
后序遍历:先递归地遍历左子树和右子树,最后访问根节点。
三、代码示例
下面是使用 C 语言实现二叉树遍历算法的代码示例:
#include #include
typedef struct node { int val; struct node *left; struct node *right;} Node;
// 创建新节点Node *new_node(int val) { Node *node = (Node *)malloc(sizeof(Node)); node->val = val; node->left = NULL; node->right = NULL; return node;}
// 前序遍历void preorder_traversal(Node *root) { if (root == NULL) { return; } printf("%d ", root->val); preorder_traversal(root->left); preorder_traversal(root->right);}
// 中序遍历void inorder_traversal(Node *root) { if (root == NULL) { return; } inorder_traversal(root->left); printf("%d ", root->val); inorder_traversal(root->right);}
// 后序遍历void postorder_traversal(Node *root) { if (root == NULL) { return; } postorder_traversal(root->left); postorder_traversal(root->right); printf("%d ", root->val);}
int main() { // 创建示例二叉树 Node *root = new_node(1); root->left = new_node(2); root->right = new_node(3); root->left->left = new_node(4); root->left->right = new_node(5); root->right->left = new_node(6); root->right->right = new_node(7);
printf("Preorder traversal: "); preorder_traversal(root); printf("\n");
printf("Inorder traversal: "); inorder_traversal(root); printf("\n");
printf("Postorder traversal: "); postorder_traversal(root); printf("\n");
return 0;}
领取专属 10元无门槛券
私享最新 技术干货