有关树的笔记

树是计算机科学中的一种非常重要的数据结构。它由一个或多个节点组成,其中一个节点是根节点,其他节点都以某种方式与这个根节点相关联。

树通常用以下方式定义:

  1. 一个节点包含一个值和指向它的一个或多个子节点的指针。
  2. 每个节点都有一个父节点,除了根节点。
  3. 没有循环,即一个节点不能直接或间接地引用它的祖先节点。
  4. 树可以为空,即不包含任何节点。

以下是一些与树有关的函数和定义:

  1. 节点(Node):表示树中的一个元素,有一个值和指向它的一个或多个子节点的指针。

  2. 根节点(Root):树的顶部节点,它没有父节点,如果树不为空,根节点是唯一的。

  3. 父节点(Parent):与给定节点直接相连的节点。

  4. 子节点(Children):直接与给定节点相连的节点。

  5. 叶子节点(Leaf):没有子节点的节点。

  6. 高度(Height):从根节点到最远叶子节点的距离(边的数量)。

  7. 深度(Depth):从根节点到给定节点的距离(边的数量)。

  8. 层数(Level):根节点的层数为0,每一层的节点深度相同。

  9. 前序遍历(Preorder Traversal):从根节点开始,先遍历根节点的值,再遍历所有左子树,最后遍历右子树。

  10. 中序遍历(Inorder Traversal):从根节点开始,先遍历左子树,再遍历根节点的值,最后遍历右子树。

  11. 后序遍历(Postorder Traversal):从根节点开始,先遍历左子树,再遍历右子树,最后遍历根节点的值。

  12. 层次遍历(Level Order Traversal):按照层数顺序遍历树的节点。

树(Tree)是一种非线性数据结构,由一个根节点和若干子树构成,每个子树也是树。在树中,每个节点只有一个父节点,但可以有多个子节点。

以下是一个使用C++建立树的示例代码:

#include <iostream>
#include <vector>

using namespace std;

struct TreeNode {
    int val;
    vector<TreeNode*> children;
    TreeNode(int x) : val(x) {}
};

void buildTree(TreeNode* root) {
    int n;
    cout << "Enter the number of children for node " << root->val << ": ";
    cin >> n;
    for (int i = 0; i < n; i++) {
        int childVal;
        cout << "Enter the value for child " << i + 1 << ": ";
        cin >> childVal;
        TreeNode* child = new TreeNode(childVal);
        root->children.push_back(child);
        buildTree(child);
    }
}

void preorderTraversal(TreeNode* root) {
    if (!root) return;
    cout << root->val << " ";
    for (auto child : root->children) {
        preorderTraversal(child);
    }
}

int main() {
    int rootVal;
    cout << "Enter the value for the root node: ";
    cin >> rootVal;
    TreeNode* root = new TreeNode(rootVal);
    buildTree(root);
    cout << "Preorder traversal result: ";
    preorderTraversal(root);
    return 0;
}

程序首先要求你输入根节点的值,然后依次输入每个子节点的值。在buildTree函数中,我们使用递归实现了树的建立。最后,使用preorderTraversal函数对建立好的树进行先序遍历,并输出结果。

在实际应用中,需要根据不同的需求定义不同的树结构和相应的函数来实现,如二叉树、搜索树等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值