c/c++语言开发共享剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]

1 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。 2 思路和方法 先给定一个二叉树的样式: 输出的样式是:[[1], [3,2], [4,5,6,7]]。包含以下信息: (1)每一层所包含的 …


1 题目描述

  请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

2 思路和方法

先给定一个二叉树的样式:

剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]

  输出的样式是:[[1], [3,2], [4,5,6,7]]。包含以下信息: (1)每一层所包含的树节点;(2)偶数层的树节点需倒序。

  思路: 面对要求的偶数层倒序,亦有两种解题思路,第一种是:获取到所有节点的值后,将偶数层的节点值倒序(先存right,再存left实现倒序)。第二种则是在获取节点的值的时候就倒序存入。定义两堆栈stack1和stack2,在遍历当前层节点的同时!stack1.empty() treenode *data=stack1.top();,存储下一层的节点(stack2.push(data->right),stack2.push(data->left)),以此类推,!stack2.empty() treenode *data=stack2.top();,存储下一层的节点(stack1.push(data->left),stack2.push(data->right))。     

3 c++核心代码

 1 /*   2 struct treenode {   3     int val;   4     struct treenode *left;   5     struct treenode *right;   6     treenode(int x) :   7             val(x), left(null), right(null) {   8     }   9 };  10 */  11 class solution {  12 public:  13     vector<vector<int> > print(treenode* proot) {  14         vector<vector<int>> result;  15         if(proot==nullptr)  16             return result;  17         stack<treenode*> stack1,stack2;//分别存奇数和偶数层  18         stack1.push(proot);  19         while(!stack1.empty() || !stack2.empty()){  20             if(!stack1.empty()){  21                 vector<int> temp;  22                 while(!stack1.empty()){  23                     treenode *data=stack1.top();  24                     stack1.pop();  25                     temp.push_back(data->val);  26                     if(data->left!=nullptr)  27                         stack2.push(data->left);  28                     if(data->right!=nullptr)  29                         stack2.push(data->right);  30                 }  31                 result.push_back(temp);  32             }  33             if(!stack2.empty()){  34                 vector<int> temp;  35                 while(!stack2.empty()){  36                     treenode *data=stack2.top();  37                     stack2.pop();  38                     temp.push_back(data->val);  39                     if(data->right!=nullptr)  40                         stack1.push(data->right);  41                     if(data->left!=nullptr)  42                         stack1.push(data->left);  43                 }  44                 result.push_back(temp);  45             }  46         }  47         return result;  48     }  49 };

参考资料

https://blog.csdn.net/u010005281/article/details/79759926

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/602135.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐