void traverse(Node* root) { queue<Node*> q; Node* temp_node= root; while(temp_node) { cout<<temp_node->value<<endl; if(temp_node->left) q.push(temp_node->left); if(temp_node->right) q.push(temp_node->right); if(!q.empty()) { temp_node = q.front(); q.pop(); } else temp_node = NULL; } }
上面发布的代码是我的等级订单遍历代码。这段代码对我来说很好用,但是我不喜欢的一件事是我正在明确初始化temp_node = NULL或使用break。但这对我来说似乎不是一个好的代码。
temp_node = NULL
有没有一个比这更好的实现,或者我怎样才能使代码更好?
void traverse(Node* root) { queue<Node*> q; if (root) { q.push(root); } while (!q.empty()) { const Node * const temp_node = q.front(); q.pop(); cout<<temp_node->value<<"\n"; if (temp_node->left) { q.push(temp_node->left); } if (temp_node->right) { q.push(temp_node->right); } } }
在那里,没有其他特殊情况了。而且压痕已经清理干净,因此更容易理解。
或者:
void traverse(Node* root) { queue<Node*> q; if (!root) { return; } for (q.push(root); !q.empty(); q.pop()) { const Node * const temp_node = q.front(); cout<<temp_node->value<<"\n"; if (temp_node->left) { q.push(temp_node->left); } if (temp_node->right) { q.push(temp_node->right); } } }
做一个for循环。就个人而言,我喜欢额外的变量。变量名比总是说’q.front()`更好。
for