欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-21 21:35:38
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