从上到下不分行顺序打印二叉树。
- 边界条件的控制
- 把各个节点加入到一个序列里面,顺序打印
废话不多说直接上代码
void printFromTopBottom(TreeNode*pTreeRoot){
if (!pTreeRoot ) {
return;
}
//队列
std:deque<TreeNode*> dequeTreeNode;
dequeTreeNode.push_back(pTreeRoot);
while (dequeTreeNode.size()) {
TreeNode*pNode = dequeTreeNode.front();
dequeTreeNode.pop_front();
printf("%d",pNode->val);
if (pNode->leftNode) {
dequeTreeNode.push_back(pNode->leftNode);
}
if (pNode->rightNode) {
dequeTreeNode.push_back(pNode->rightNode);
}
}
}
打印当前节点的时候,把当前节点的左右节点依次加入到deque的末尾,这样顺序打印。
举一反三 ,现在要分行顺序打印二叉树
通过分析,我们想到
通过变量记录下一行需要打印的个数
-
通过变量统计当前行还要打印的节点的个数,当数量为0的时候,换行。清空nextLine的数量。并给需要打印的个数赋值nextLine的个数。
//分行 顺序打印二叉树
void printTree(TreeNode*pTreeRoot){ if (!pTreeRoot ) { return; } // 一个记录剩余被打印的。 一个记录下一行的个数 int toBePrint = 1; int nextLevel = 0; std::deque<TreeNode*> queue; queue.push_front(pTreeRoot); while (!queue.empty()) { TreeNode*pNode = queue.front(); queue.pop_front(); printf("%d",pNode->val); if (pNode->leftNode) { queue.push_back(pNode->leftNode); nextLevel++; } if (pNode->rightNode) { queue.push_back(pNode->rightNode); nextLevel++; } toBePrint -- ; if (toBePrint == 0) { printf("\n"); toBePrint = nextLevel; nextLevel = 0; } } }