标签:
题目1:写一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层。
思路:利用递归算法,思想是:要求访问二叉树中第k层的节点,那么其实就是要访问“以该二叉树根节点的左右子节点为根节点的两颗子树”中层次为k-1的节点
代码:
struct pNode {
int data;
pNode *lChild;
pNode *rChild;
};
int printNodeAtLevel(pNode *root, int level) {
if(root == NULL || level == -1) return 0;
if(level == 0) {
cout << root->data << ' ';
return 1;
}
return printNodeAtLevel(root->lChile, level-1) + printNodeAtLevel(root->rChild, level-1);
}题目二:
分层遍历一颗二叉树,如果用一个循环,来调用题目1中的代码的话,效率太低了,因为那样的话,每打印一层的信息的话, 那么都要从根节点重新开始往下找。
所以要找数据结构要存储上一层的信息,,当打印第k层的时候,直接找出k+1层的信息。
所以这里可以用队列来实现!
思路:
struct pNode {
int data;
pNode *lChild;
pNode *rChild;
};
void PrintNodeByLevel(pNode *root) {
if(root == NULL) return ;
queue<Pnode *> root;
q.push(root);
while(!q.empty()) {
cout << q.front()->data << ' ';
if(q.front()->lChild) q.push(q.front()->lChild);
if(q.front()->rChild) q.push(q.front()->rChild);
q.pop();
}
return ;
}
标签:
原文地址:http://blog.csdn.net/u010470972/article/details/45559043