Skip to content

Binary Trees(二叉树)

他是涉及如何高效实现一个集合的问题

Tree(树)

一种有向的、无环的链接节点结构。

  • 什么是有向?:

    节点之间有单向链接。

  • 什么是无环?:

    没有路径会回绕到同一节点两次。

最常见的树结构是二叉树。

Binary Tree(二叉树)

二叉树就是每个节点最多有两个子节点的树。

树要么是空,要么是一个根节点

  • 空: 树中没有节点(nullptr)
  • 根节点: 树的顶端节点
    • 数据
    • 左子树
    • 右子树

tree node

c++
struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

print tree

c++
void print(TreeNode* node) {
    cout << node->date << endl;
    if (node->left != nullptr) {
        print(node->left);
    }
    if (node->right != nullptr) {
        print(node->right);
    }
}

但是这段代码有个小问题: 就是根节点如果为空,那么就会崩溃。

c++
void print(TreeNode* node) {
    if (node != nullptr) {
        cout << node->date << endl;
        print(node->left);
        print(node->right);
    }
}

size of tree

c++
int size(TreeNode* node) {
    if (node == nullptr) {
        return 0;
    }else {
        return 1 + size(node->left) + size(node->right);
    }
}