JZ78 把二叉树打印成多行

把二叉树打印成多行_牛客题霸_牛客网 ---leetcode102-层序遍历

描述

给定一个节点数为 n 二叉树,要求从上到下按层打印二叉树的 val 值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中返回。

1.根节点入队,pcur当前结点,plast每次保存入队结点,prelast保存每一层的最后一个结点
 2.队不空的时候进入循环,如果当前结点有左孩子,左孩子入队,plast保存,右孩子不空,右孩子入队-plast保存
3.如果当前结点pcur==prelast,保存结果该行结果。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <deque>
#include <iterator>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > Print(TreeNode* pRoot) {
        // write code here
        if(!pRoot) return vector<vector<int>> {};
        using Res_type =  vector<vector<int>> ;
        Res_type res;
        vector<int> res_row;//保存每一层的结果

        TreeNode *pCur = pRoot;
        TreeNode *pLast = pRoot;//记录每次入队的结点
        TreeNode *preLast = pRoot; //记录plast,当plast指向每一层的最后一个结点时更新
        queue<TreeNode *> treeQueue; //辅助队列
        
        treeQueue.push(pCur);
        while(!treeQueue.empty()){
            pCur = treeQueue.front();
            res_row.push_back(pCur->val);
            if(pCur->left){
                treeQueue.push(pCur->left);
                pLast = pCur->left;
            }
            if(pCur->right){
                treeQueue.push(pCur->right);
                pLast = pCur->right;
            }

            if(pCur == preLast){ //当前出队结点 = 每一层最右边的结点
                res.push_back(res_row);
                res_row.clear();
                preLast = pLast; //更新prelast
            }
            treeQueue.pop();
        }
        return res;
    }
};

在 VS 中把二叉树树状,需要借助于图形界面的控件。首先,我们需要添加一个 TreeView 控件,在该控件中可以显示二叉树的节点和它们之间的关系。接着,我们需要编写代码将二叉树的节点添加到 TreeView 控件中,并且设置它们之间的父子关系。对于一个二叉树,我们可以使用递归的方式来遍历每一个节点,并将它们加入到 TreeView 控件中。 首先,定义一个名为 BuildTree 的方法,这个方法接受两个参数:一个 TreeView 控件,以及一个二叉树节点。在 BuildTree 方法中,使用递归的方式遍历二叉树,将每一个节点添加到 TreeView 控件中。具体实现过程如下: ``` void BuildTree(TreeView treeView, TreeNode treeNode){ if (treeNode == null) return; TreeNode node = new TreeNode(treeNode.Value); treeView.Nodes.Add(node); BuildTree(treeView, treeNode.LeftChild, node); BuildTree(treeView, treeNode.RightChild, node); } ``` 在 BuildTree 中首先判断当前节点是否为空,如果为空则返回。接着,创建一个 TreeNode 对象,并将它添加到 TreeView 控件的 Nodes 集合中。接下来,递归调用 BuildTree 方法,传入当前节点的左子节点和右子节点,并将当前节点作为它们的父节点,通过设置 TreeNode 的 Parent 属性来标识出它们的父子关系。 最后,将 BuildTree 方法所构建的树赋值给 TreeView 控件的 DataSource 属性,即可在 VS 中将二叉树树状了。这样,我们就可以在 TreeView 控件中,通过选择不同的节点,来展开或收起与它有父子关系的节点,以查看二叉树各节点之间的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给你。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值