我在打印二叉树时遇到问题。基本上每个节点包含两个值 - 键和数据。问题出在这个任务上,
我应该使用双空格而不是\ t。基本上它意味着,\ t = 2个空格,\ t \ t = t个空格,\ t \ t \ t \ t = 6个空格
我的问题是,我已按以下方式实现了printIndented方法 -
void
TreeDictionary::printIndented(TreeNode * node, int level) {
if (node == NULL)
return;
if (level == 0)
{
std::cout << node->_key << ':' << node->_data << "\n";
level++;
printIndented(node->_left, level);
printIndented(node->_right, level);
}
else
{
if ((node->_left == NULL) && (node->_right == NULL))
cout << '\t';
cout << "\t" << node->_key << ':' << node->_data << endl;
if ((node->_left != NULL) && (node->_right != NULL))
cout << '\t';
printIndented(node->_left, level);
if ((node->_left != NULL) && (node->_right != NULL))
cout << '\t';
printIndented(node->_right, level);
}
}
给我一个输出如下 -
---=WHAT I AM GETTING=---
pineapple:0
kiwi:1
grapes:3
apple:5
orange:6
lime:8
olives:9
mango:10
strawberry:4
watermelon:7
---=EXPECTED OUTPUT=--- (as you see it prints 2 spaces instead of each \t)
pineapple:0
kiwi:1
grapes:3
apple:5
NULL
NULL
NULL
orange:6
lime:8
NULL
olives:9
mango:10
NULL
NULL
NULL
NULL
strawberry:4
NULL
watermelon:7
NULL
NULL
似乎我无法考虑NULL值,并且只要找到NULL条目就打印NULL。感谢所有帮助!
注意:预期输出是默认缩进级别,该程序为0。
答案 0 :(得分:2)
您并非真正使用了解自己所处的水平所获得的信息。可以将其视为屏幕最左边的缩进。每个级别你想要缩进2 *级空格。从输出中,它看起来像一个NULL节点打印出NULL。您可以尝试以下方式:
Indent(Treenode *node, int level){
std::cout << std::string(2*level, ' ');
if(node == NULL){
std::cout << "NULL" << std::endl;
}else{
std::cout << node->_key << ":" << node->_data << std::endl;
level += 1;
Indent(node->_right, level);
Indent(node->left, level);
}
}
答案 1 :(得分:0)
首先,您还应该检查0级的第一个节点是否有子节点。否则,如果树中只有一个节点,则可能会遇到错误。
其次,我鼓励你在if语句之后使用卷曲括号,这是令人困惑的,不太可读:
if((node->_left != NULL) && (node->_right != NULL)) {
cout << "\t"; //or in your case maybe: cout << " "; //see point 3
}
第三点,当你想要打印空格而不是&#39; \ t&#39;你应该做&#39; &#39;而不是&#39; \ t&#39;。你也使用&#34; \ t&#34;,这是打印字符串而不是字符的语法,这没有错,但我认为你需要理解这个原理。 &#39; \吨&#39; = const char,&#34; \ t&#34; = const string
第四,我真的不明白你用不同类型的缩进打印的标准是什么,所以如果你能用if语句解释你想要完成什么,那么我可以解释一下也是你。如果您有任何疑问或者您觉得这没有用,请告诉我:) 祝你好运!