首页 > 其他分享 >二叉树遍历(102.144.94.145)

二叉树遍历(102.144.94.145)

时间:2023-04-14 23:02:17浏览次数:71  
标签:102.144 TreeNode nullptr right que vec 94.145 left 二叉树

102. 二叉树的层序遍历
BPS

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> vec_all;
        //如果为空, 直接返回
        if(root == nullptr) return vec_all;
        //使用队列保存每层的所有节点,每次把队列里的原先所有节点进行出队列操作,再把每个元素的非空左右子节点进入队列。因此即可得到每层的遍历。
        //怎么知道是在这一层呢? 关键是每一次循环都设一个size,没pop一次就size--
        queue<TreeNode*> que;
        TreeNode* cur = root;
        //第一层入队
        que.emplace(cur);
        //如果队列为空, 就退出循环
        while(!que.empty())
        {
            //如果这一层的元素遍历完了, 就退出循环
            int size = que.size();
            //存放一层的数据
            vector<int> vec;
            while(size--)
            {
                //插入队首元素 
                vec.emplace_back(que.front()->val);
                //如果队首有子节点, 插入到que中
                if(que.front()->left!=nullptr) que.emplace(que.front()->left);
                if(que.front()->right!=nullptr) que.emplace(que.front()->right);
                //删除队首节点
                que.pop();
            }
            //将一层放入vec_all中汇总
            vec_all.emplace_back(vec);
        }
        return vec_all;
    }
};

144. 二叉树的前序遍历
递归

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    //辅助函数
    void pre_order(vector<int>& vec, TreeNode* cur)
    {
        //递归终止
        if(cur == nullptr) return;
        //前序遍历就是最先打印出来
        vec.push_back(cur->val);
        //递归关系
        pre_order(vec, cur->left);
        pre_order(vec, cur->right);
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> vec;
        TreeNode* cur = root;
        pre_order(vec, cur);
        return vec;
    }
};

循环(待续)


ps: 中序和后序就是在递归的中间和后面打印出来

标签:102.144,TreeNode,nullptr,right,que,vec,94.145,left,二叉树
From: https://www.cnblogs.com/Long23/p/17320196.html

相关文章

  • UVA - 699 The Falling Leaves 二叉树
    题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19244题意:给定一棵二叉树,把根节点标号成0,然后每往左走标号就减1,每往右走标号就加1,问相同标号的节点的值得和,按标号的大写依次输出思路:输入挺坑的,不过看了一会,可以边输入边建树,碰到其他值要接着往下递归建树,碰到-1......
  • LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格。虽然竞赛算法题的文章受众非常小,但却有很多像我一样的初学者,他们有兴趣参加但容易被题目难......
  • 二叉树先序,中序,后序遍历的非递归算法(一)
    前序遍历的非递归算法<法一>思路:二叉树的前序遍历过程:从树根开始沿着左子树一直深入,直到最左端无法深入时,返回;进入最近深入时遇到结点的右子树,再进行如此的深入和返回;直到最后从根节点的右子树返回到根节点为止;由其深入返回的过程我们知道可以用一个栈来帮助我们消除递归......
  • 二叉树的先序遍历
    二叉树的先序遍历遍历二叉树遍历方法遍历方法有先序遍历,中序遍历,和后序遍历先序遍历:按照根,左子树,右子树的顺序遍历中序遍历:按照先左子树,根和右子树的顺序遍历后序遍历:按照先左子树,右子树和根的顺序遍历使用递归进行遍历二叉树的先序遍历算法示意图算法实现......
  • 4月12日数据结构,线索二叉树,哈夫曼树,哈夫曼编码
    线索二叉树与以往的二叉树略有不同,普通二叉树在访问到叶子结点的时候会返回,往往递归的效率并不高,有时还可能有栈溢出的风险,但是线索二叉树在访问到叶子结点的时候因为没有左右孩子,所以他左边存放他前驱的指针。右边存放后继的指针,是指从一个非线性结构变成了一个可以线性访问的的......
  • 二叉树的前、中、后序遍历以及查找-Java实现
    对于遍历不过多的赘述,关于查找有关的思想,关键是如何实现查找的顺序以及结果的回传;附代码1packagedataSrtuct;23publicclassBinaryTreeDemo{4publicstaticvoidmain(String[]args){5BinaryTreebinaryTree=newBinaryTree();6......
  • 二级指针创建二叉树节点与一级指针创建二叉树节点
     1、c++中的struct结构体变量定义可以直接“类型名变量名”,c中只能“struct类型名变量名”,可以通过typedef达到相同的效果;struct_x1{...}x1;是定义了类_x1和_x1的对象实例x1,typedefstruct_x2{...}x2; 定义了类_x2和_x2的类别名x2;typedefstruc......
  • UVa 112 Tree Summing (scanf()去空格&递归&二叉树遍历)
    112-TreeSummingTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=48BackgroundLISPwasoneoftheearliesthigh-levelprogramminglanguagesand,withFORTRAN,isoneoft......
  • 二叉树的顺序存储
    二叉树的顺序存储二叉树的存储形式按照二叉树的结点层次编号,然依次后储存在数组当中二叉树的抽象数据类型表示二叉树顺序存储结构的示意图例题二叉树顺序存储结构的缺点1.顺序存储结构的大小固定不能动态的变化2.如果如图上为右单支树一样浪费空间所以顺序存储结构......
  • 判断二叉树是否对称
    递归遍历recursion(root1,root2){if(root1==null&&root2== null){returnture;}if(root1==null||root2==null||root1.val!=root2.val)returnfalse;returenrecursion(root1.left,root2.right)&&recursion(root2.left,root2.right);......