关于二叉树的一些知识(长期更新)

1、常规的层序遍历如下:

void levelOrder(TreeNode* root) {
    if (!root) {
        return;
    }

    std::queue q;
    q.push(root);
    while (!q.empty()) {
        // 每次循环中,处理队头元素,并将队头元素的孩子入队
        TreeNode* node = q.front();
        std::cout << node->val << " ";
        q.pop();
        if (node->left) {
            q.push(node->left);
        }
        if (node->right) {
            q.push(node->right);
        }
    }
}

经过一些修改之后,可以在遍历的同时获取二叉树的高度

// result的长度就是二叉树的高度
vector> levelOrder(TreeNode* root) {
    vector> result; // 存储最终结果(按层分组)
    if (!root) return result;   // 空树直接返回

    queue q;
    q.push(root);

    while (!q.empty()) {
        int levelSize = q.size(); // 当前层的节点数
        vector currentLevel; // 存储当前层的节点值

        for (int i = 0; i < levelSize; ++i) {
            TreeNode* node = q.front();
            q.pop();
            currentLevel.push_back(node->val);

            // 将子节点入队
            if (node->left) q.push(node->left);
            if (node->right) q.push(node->right);
        }

        result.push_back(currentLevel); // 将当前层加入结果
    }

    return result;
}

你可能感兴趣的:(算法,c++,数据结构)