按层访问二叉树

博客围绕按访问方式对二叉树进行操作展开,涉及二叉树的相关信息技术知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>

#include<queue>

using namespace std;


typedef struct tag_TreeNode{
    int val;
    struct tag_TreeNode* left;
    struct tag_TreeNode* right;

    tag_TreeNode(int val) : val(val)
    {
        left = NULL;
        right = NULL;
    }

    tag_TreeNode() {}
}TreeNode;
typedef TreeNode* TreeNodePtr;

TreeNodePtr g_TreeRoot;        // 根节点

void InitTree();
TreeNodePtr InitTreeNode(int val);

void InitTree()
{
    g_TreeRoot = InitTreeNode(0);

    g_TreeRoot->left = InitTreeNode(1);
    g_TreeRoot->right = InitTreeNode(2);

    g_TreeRoot->left->left = InitTreeNode(3);
    g_TreeRoot->left->right = InitTreeNode(4);
    g_TreeRoot->right->left = InitTreeNode(5);
    g_TreeRoot->right->right = InitTreeNode(6);

    g_TreeRoot->left->left->left = InitTreeNode(7);
    g_TreeRoot->left->left->right = InitTreeNode(8);
    g_TreeRoot->left->right->left = InitTreeNode(9);
    g_TreeRoot->left->right->right = InitTreeNode(10);

    g_TreeRoot->right->left->left = InitTreeNode(11);
    g_TreeRoot->right->left->right = InitTreeNode(12);
    g_TreeRoot->right->right->left = InitTreeNode(13);
    g_TreeRoot->right->right->right = InitTreeNode(14);

}

TreeNodePtr InitTreeNode(int val)
{
    TreeNodePtr node_ptr = new TreeNode(val);
    if (NULL == node_ptr)
    {
        return NULL;
    }

    return node_ptr;
}

void printFront(TreeNodePtr root)
{
    queue<TreeNodePtr> q;
    q.push(root);

    while(!q.empty())
    {
        TreeNodePtr tmp = q.front();
        cout << tmp->val << endl;
        q.pop();
        if(tmp->left)
            q.push(tmp->left);
        if (tmp->right)
            q.push(tmp->right);
    }
}

int main(int argc, const char **argv)
{
    InitTree();

    printFront(g_TreeRoot);

    return 0;
}
### PTA 平台上的按遍历二叉树实现 在 PTA 平台上,按遍历二叉树是一个常见的题目类型。其实现通常涉及以下几个方面: #### 1. 构建二叉树 构建二叉树可以通过先序序列和中序序列完成[^1]。如果仅提供先序序列,则可以利用特定标记(如 `#` 表示空节点)来解析输入并创建对应的二叉树结构[^2]。 以下是基于先序序列构建二叉树的 Python 实现代码: ```python class TreeNode: def __init__(self, val=None): self.val = val self.left = None self.right = None def build_tree(preorder): if not preorder: return None root_val = preorder.pop(0) if root_val == '#': return None node = TreeNode(root_val) node.left = build_tree(preorder) node.right = build_tree(preorder) return node ``` #### 2. 按遍历算法 按遍历的核心在于使用队列辅助操作。每次从队列头部取出当前节点,并将其子节点依次加入队列尾部,直到队列为空为止。 下面是按遍历的具体实现代码: ```python from collections import deque def level_order_traversal(root): result = [] queue = deque([root]) while queue: current_node = queue.popleft() if current_node is not None: result.append(current_node.val) queue.append(current_node.left) queue.append(current_node.right) else: result.append('#') # 如果遇到空节点,可以用 '#' 替代 return ''.join(result).rstrip('#') ``` #### 3. 综合应用实例 假设给定先序序列 `"ABD##E##CF##G##"`,我们可以按照上述方法逐步构建二叉树并执行按遍历。 完整的程序如下所示: ```python if __name__ == "__main__": preorder_input = list(input().strip()) # 输入先序序列 tree_root = build_tree(preorder_input) # 构造二叉树 traversal_result = level_order_traversal(tree_root) # 执行按遍历 print(traversal_result) # 输出结果 ``` 对于样例输入 `"ABD##E##CF##G##"`,其输出应为 `"ABCDEFG"`,表示按顺序访问的结果。 --- ### 注意事项 - **输入格式**:需严格按照指定形式输入先序序列,其中 `#` 表示空节点。 - **边界条件处理**:当输入仅为单个节点或完全为空时,确保程序能够正确返回预期结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值