之字形打印二叉树
Posted pacino12134
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了之字形打印二叉树相关的知识,希望对你有一定的参考价值。
输出顺序:
1
3 2
4 5 6 7
15 14 13 12 12 10 9 8
使用两个栈作为辅助容器。打印某一层节点时,把下一层的子节点保存到栈内。如果当前打印的是奇数层,则先保存左子树节点再保存右子树节点到第一个栈内;如果当前打印的是偶数层,则先保存右子树在保存左子树节点到第二个栈内。
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 vector<int> vec_tmp; 16 //边界 17 if(pRoot==nullptr) return result; 18 //辅助容器:两个栈 19 //声明变量时后面加个[]表示是数组 20 stack<TreeNode*> s[2];//s[0]是奇数层,s[1]是偶数层;栈数组 21 int now=0; 22 int next=1; 23 TreeNode* temp=pRoot; 24 //根节点入栈 25 s[now].push(temp); 26 //遍历两个栈,当两个栈都为空时,跳出循环 27 while(!s[now].empty() || !s[next].empty()) 28 //存储遍历结果 29 temp = s[now].top(); 30 vec_tmp.push_back(temp->val); 31 s[now].pop(); 32 //当前层是奇数层还是偶数层 33 if(now==0) 34 if(temp->left) s[next].push(temp->left); 35 if(temp->right) s[next].push(temp->right); 36 37 else 38 if(temp->right) s[next].push(temp->right); 39 if(temp->left) s[next].push(temp->left); 40 41 //当前层为空时,打印下一层 42 if(s[now].empty()) 43 result.push_back(vec_tmp); 44 vec_tmp.clear(); 45 now = 1-now; 46 next=1-next; 47 48 49 return result; 50 51 ;
以上是关于之字形打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章