题目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 ; }
时间: 2024-10-09 13:17:05