二叉树的创建和遍历【c++】

前言:二叉树是什么?

二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为“左子节点”和“右子节点”。二叉树被广泛用于各种计算机科学应用中,例如表达式解析、搜索算法、排序、数据存储等。

主要特点

  1. 根节点:二叉树的顶层节点称为根节点。树中的所有其他节点都可以通过根节点到达。
  2. 子节点:每个节点可以有零、一个或两个子节点,分别称为左子节点和右子节点。
  3. 叶子节点:没有子节点的节点称为叶子节点,它们位于二叉树的底层。
  4. 高度:二叉树的高度是从根节点到叶子节点最长路径上的节点数。

二叉树的类型

  • 满二叉树:一个二叉树中所有节点都有两个子节点,且所有叶子节点在同一层上。
  • 完全二叉树:除最后一层外,其他层都被完全填满,而最后一层的节点从左到右排列。
  • 二叉搜索树(BST):一种特殊的二叉树,其中每个节点的左子节点值小于该节点值,而右子节点值大于该节点值。
  • 平衡二叉树:任意节点的左右子树高度差不超过1的二叉树。

二叉树的应用

  • 表达式树:用于计算算术表达式。
  • 二叉搜索树(BST):用于高效搜索、插入和删除操作。
链式二叉树,也称为线索二叉树,是一种特殊的二叉查找树结构,其中每个节点除了包含左右子指针外,还额外有一个前驱指针或后继指针,用于辅助双向查找。创建链式二叉树的基本步骤如下: 1. **创建节点**: - 定义一个二叉树节点类,通常包括整型数据域、左指针、右指针以及前驱或后继指针。 ```cpp struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode* prev; // 前驱节点指针 TreeNode* next; // 后继节点指针 (仅用于循环链表) }; ``` 2. **初始化**: - 创建新节点时,需要设置默认的前驱或后继指向空。 3. **插入操作**: - 插入元素时,首先搜索相应位置,然后调整前后指针以保持线索连接的完整性。 4. **遍历**: - 链式二叉树有多种遍历方式,常见的有顺序遍历(如先序、中序后序),还有线索化的前序后续遍历。以下是基本的线索化前序遍历示例: ```cpp void inOrderTraversal(TreeNode* root) { if (root != nullptr) { if (root->prev == nullptr) { // 标志未访问过 if (root->left != nullptr) { inOrderTraversal(root->left); } std::cout << root->val << " "; if (root->right != nullptr) { inOrderTraversal(root->right); } // 更新当前节点的前驱指针 if (root->left != nullptr) { root->left->next = root; } else { root->prev->next = root; } root->prev = nullptr; // 移除线索 } else { inOrderTraversal(root->prev); // 继续遍历前驱节点 } } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值