首页 > 其他分享 >之字形打印二叉树 剑指offer

之字形打印二叉树 剑指offer

时间:2024-12-16 19:31:22浏览次数:8  
标签:之字形 offer 打印 保存 二叉树 栈里 节点

题目描述

        请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如,按之字形顺序打印下图二叉树的结果为:

题目分析

        按之字形顺序打印二叉树需要两个栈。我们在打印某一层的节点时,把下一层的子节点保存到相应的栈里如果当前打印的是奇数层(第一层、第三层等),则先保存左子节点再保存右子节点到第一个栈里;如果当前打印的是偶数层(第二层、第四层等),则先保存右子节点再保存左子节点到第二个栈里。
        你可能会疑惑为什么需要两个栈。我们看看如果只有一个栈会有哪些问题。在打印根节点的时候,先后把节点2和节点3保存到里。接下来打印节点3。在打印节点3时,把它的两个子节点6和7保存到栈里。此时由于节点7位于栈顶,接下来将打印节点7,而不是节点2。为了避免这个问题,节点6和节点7要保存到另一个栈里。

代码实现

代码解释

         上述代码定义了两个栈levels[0]和levels[1]。在打印一个栈里的节点时,它的子节点保存到另一个栈里。当一层所有节点都打印完毕时,交换这两个栈并继续打印下一层。

测试用例

本题考点

标签:之字形,offer,打印,保存,二叉树,栈里,节点
From: https://blog.csdn.net/2301_78353179/article/details/144490210

相关文章

  • Java程序员面试1000问,花点耐心看完offer拿到手软
    前言:本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈,希望大家都能找到适合自己的公司,开开心心的撸代码。目录:......
  • 搞定leetcode面试经典150题之二叉树
    系列博客目录文章目录系列博客目录基础知识1.二叉树的基本定义2.二叉树的性质3.二叉树的类型4.二叉树的遍历5.二叉树的实现6.常见的二叉树算法7.二叉树的应用总结例题104.二叉树的最大深度226.翻转二叉树101.对称二叉树100.相同的树102.二叉树的层序遍历98.验......
  • 二叉树常见题目2
    [Algo]二叉树常见题目21.最近公共祖先LCABinaryTreeNode*LCA(BinaryTreeNode*root,BinaryTreeNode*a,BinaryTreeNode*b){if(root==nullptr||root==a||root==b)returnroot;BinaryTreeNode*l=LCA(root->left,a,b),*r=LCA(root->right,a,......
  • 二叉树常见题目
    [Algo]二叉树常见题目1.层序遍历//1.层序遍历voidBFS(BinaryTreeNode*root){queue<BinaryTreeNode*>q;vector<BinaryTreeNode*>v;q.push(root);while(!q.empty()){while(!q.empty()){v.push_back(q.fro......
  • 代码随想录day18 | leetcode 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236
    刷题收获所有递归的写法都与正常人类想法的实现顺序相反,都是先写条件成立会发生什么再写递归成立条件通过递归调用栈实现回到上一个节点节点(恢复上一层的状态),调用栈能够记录每次递归调用的函数状态,包括函数的局部变量、参数以及函数执行到的具体位置。当递归到某个节点......
  • 代码随想录训练营第十五天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 22
    110.平衡二叉树题目链接:110.平衡二叉树-力扣(LeetCode)讲解链接:代码随想录 求高度不是求深度高度需要从下到上(后序遍历)深度需要从上到下(先序遍历)Java代码:classSolution{publicbooleanisBalanced(TreeNoderoot){//递归做法returngetHeight......
  • 代码随想录训练营第十八天| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.
     530.二叉搜索树的最小绝对差 题目链接/文章讲解:代码随想录视频讲解:二叉搜索树中,需要掌握如何双指针遍历!|LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili 注意是二叉搜索树,二叉搜索树可是有序的。给你一个二叉搜索树的根节点 root ,返回 树中任意两......
  • 科丁乐K12137 二叉树中的秘密
    题目描述新年伊始,我飞买了一棵二叉树,传闻这棵二叉树的某一个节点上隐藏着上古的秘密,于是我飞开始昼夜不息的寻找。本着不遗漏任何一个节点的原则,飞神打算遍历整棵二叉树。设S为飞神当前所处的节点。若S有两个子节点L,R,则飞神总是先去遍历节点较少的那棵子树,然后再去遍历另......
  • 开拓计划4 - 二叉树与并查集
    开拓计划4-二叉树与并查集二叉树二叉树的概念Q:什么是树?A:一种有\(n\)个节点最多有\(n-1\)条边的图。Q:什么是二叉树?A:每个节点都最多只有两个子节点的树。二叉树和递归Q:二叉树和递归有什么关系?A:在执行递归的时候总是会自己调用自己,每一次调用都会产生新的一层,新......
  • 代码随想录训练营第十七天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 9
    654.最大二叉树  题目链接/文章讲解:代码随想录视频讲解:又是构造二叉树,又有很多坑!|LeetCode:654.最大二叉树_哔哩哔哩_bilibili创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组......