二叉树的创建和相关算法

本文主要探讨二叉树这一重要的数据结构,包括先序、中序、后序和层序四种创建方法。先序创建依赖递归,中序和后序的区别仅在于根节点的创建顺序。层序创建利用队列,自顶向下、从左到右进行。这些创建方式都基于二叉树的遍历算法。
摘要由CSDN通过智能技术生成

 

二叉树是一种非常重要的数据结构,它是分支结构的基础,今天本人将写一篇博客来叙述一下其相关的算法以及二叉树的创建过程!

1:二叉树的创建:

主要有 先序,中序,后序,层序创建几种方式,其中前三种建立在二叉树遍历方式的基础上的。

(1):先序创建

     先序创建就是先创建根节点,随后依次创建其左子树和右子树,我们可以采用递归的方法来实现,因为二叉树本身就是建立在递归算法的基础上的。

(2):中序和后序创建:

   明白了前序创建二叉树的方式,中序和后续我们也可以类比出来,所谓前中后序,就是创建根节点的顺序而已。

(3):层序遍历和创建:


  以上图片反映的层序遍历的过程,层序遍历是建立在队列的基础上的,首先如果一颗二叉树非空,让根节点入队,如果根节点的左子树后右子树非空,则根节点出队并打印它的数据域的值,左右子树先后入队(谁不空谁入队),随后就是一个递归的过程了。

可见层序遍历是从上到下,从左到右的一个遍历过程。

所以我们也可以层序创建一个二叉树:首先创建根节点,如果根节点的左孩子和右孩子指针没有指向虚结点,则创建左子树和右子树,也是通过递归的方式来创建的。


二叉树代码:


函数文件 Bittree.c:

#include "Bittree.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

tree *Creat(tree* root, tree*(*ptree)(tree *root))
{
	root = ptree(
以下是二叉树的建立和三种遍历算法的C++代码实现: ```C++ #include <iostream> #include <queue> using namespace std; // 二叉树结构体定义 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 递归方式建立二叉树 TreeNode* createTree(vector<int>& nums, int left, int right) { if (left > right) { return NULL; } int mid = (left + right) / 2; TreeNode* root = new TreeNode(nums[mid]); root->left = createTree(nums, left, mid - 1); root->right = createTree(nums, mid + 1, right); return root; } // 递归方式前序遍历二叉树 void preOrder(TreeNode* root) { if (root == NULL) { return; } cout << root->val << " "; preOrder(root->left); preOrder(root->right); } // 递归方式中序遍历二叉树 void inOrder(TreeNode* root) { if (root == NULL) { return; } inOrder(root->left); cout << root->val << " "; inOrder(root->right); } // 递归方式后序遍历二叉树 void postOrder(TreeNode* root) { if (root == NULL) { return; } postOrder(root->left); postOrder(root->right); cout << root->val << " "; } // 非递归方式层次遍历二叉树 void levelOrder(TreeNode* root) { if (root == NULL) { return; } queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* node = q.front(); q.pop(); cout << node->val << " "; if (node->left != NULL) { q.push(node->left); } if (node->right != NULL) { q.push(node->right); } } } int main() { vector<int> nums = {1, 2, 3, 4, 5, 6, 7}; TreeNode* root = createTree(nums, 0, nums.size() - 1); cout << "preOrder: "; preOrder(root); cout << endl; cout << "inOrder: "; inOrder(root); cout << endl; cout << "postOrder: "; postOrder(root); cout << endl; cout << "levelOrder: "; levelOrder(root); cout << endl; return 0; } ``` 以上代码实现了二叉树的建立和三种遍历算法,其中二叉树的建立使用递归方式,遍历算法使用了递归和非递归两种方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值