二叉树定义与基础操作

二叉树结点定义

1
2
3
4
5
6
struct TreeNode {
    int val;
    TreeNode *left, *right;
    TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right): val(x), left(left), right(right) {}
};

建立二叉树

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 先序建立二叉树,返回根节点,空节点用 0 表示
TreeNode* createBiTree(TreeNode *root) {
    int val;
    cin >> val;
    if (val) {
        root = new TreeNode(val);
        root->left = createBiTree(root->left);
        root->right = createBiTree(root->right);
    }
    return root;
}

例如输入:1 2 3 0 0 4 0 0 5 0 0,对应的二叉树为:

1
2
3
4
5
    1
   / \
  2   5
 / \
3   4

二叉树的遍历

先序遍历

中序遍历

后序遍历

通用版本