【发布时间】:2018-05-26 06:40:59
【问题描述】:
我正在尝试对二叉树进行曲折遍历。但是我被困在一种类型的测试用例中,即当树不平衡时。如果我输入为
3
3 9 20 null null 15 7
对于一个看起来像这样的二叉树:
3
/ \
9 20
/ \
15 7
我得到输出:
3
20 9
0
如果我的输入是 3 9 20 1 null 15 7,我的输出是: 3 20 9 1 0
下面是我的代码。
struct node
{
int data;
node* left;
node* right;
};
void order (node* root, map <int, vector <int> >& ans, int level, int k) {
if (root == NULL) {
return;
}
if (k==0) {
if (root->left != NULL) {
ans[level+1].push_back(root->left->data);
order (root->left, ans, level+1, 1);
}
if (root->right != NULL) {
ans[level+1].push_back(root->right->data);
order (root->right, ans, level+1, 1);
}
}
else if (k==1) {
order (root->left, ans, level+1, 0);
order (root->right, ans, level+1, 0);
if (root->right != NULL)
ans[level+1].push_back(root->right->data);
if (root->left != NULL)
ans[level+1].push_back(root->left->data);
}
}
vector<vector<int> > zigzag(node* root){
map <int, vector <int> > ans;
vector <vector <int> > zig;
ans[0].push_back(root->data);
order(root, ans, 1, 1);
for (auto it = ans.begin(); it != ans.end(); it++ ) { //converting map into vector
zig.push_back(it->second);
}
return zig;
}
据我了解,如果输入为 null,我的代码不应返回任何内容并继续执行其他节点。我无法弄清楚我的错误。有谁能够帮我? 蒂亚!
【问题讨论】:
标签: c++ tree binary-tree tree-traversal zigzag