请修改下面的源代码实现如下问题要求(实际上只需修改3.4两个要求)
问题描述:创建二叉树并遍历
基本要求:
1、 分别运用非递归的方式完成对二叉树的先序和后序遍历
2、 输出二叉树的高度
3、 输出每一层的结点数
4、 查找结点P 和结点Q的最近共同祖先
http://www.hadxw.com/forum.php?mod=viewthread&tid=11&extra=page%3D1
基本要求:
1、 分别运用非递归的方式完成对二叉树的先序和后序遍历
2、 输出二叉树的高度
3、 输出每一层的结点数
4、 查找结点P 和结点Q的最近共同祖先
http://www.hadxw.com/forum.php?mod=viewthread&tid=11&extra=page%3D1
作者: songxxu 发布时间: 2011-06-13
问题3是按层次遍历二叉树:
C/C++ code
这里有发:http://read.pudn.com/downloads10/sourcecode/math/42397/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%B1%BB.cpp__.htm
C/C++ code
//按层遍历算法 void LevelOrder(BTreeNode* BT) { //定义存储二叉树结点指针的数组空间作为队列使用 const MaxSize=30; //为防止溢出,数组长度要不小于任何相邻两层的结点数之和 BTreeNode* Q[MaxSize]; //定义队首指针和队尾指针,初始均置0表示空队 int front=0, rear=0; //定义结点指针类型的变量p BTreeNode* p; //树根结点指针进队 if(BT!=NULL) { rear=(rear+1)%MaxSize; Q[rear]=BT; } //当队列非空时执行循环 while(front!=rear) { front=(front+1)%MaxSize; //后移队首指针 p=Q[front]; //删除队首结点 cout<<p->data<<' '; //输出队首结点的值 if(p->left!=NULL) {//若结点存在左孩子,则左孩子结点指针进队 rear=(rear+1)%MaxSize; Q[rear]=p->left; } if(p->right!=NULL) {//若结点存在右孩子,则右孩子结点指针进队 rear=(rear+1)%MaxSize; Q[rear]=p->right; } } }
这里有发:http://read.pudn.com/downloads10/sourcecode/math/42397/%E4%BA%8C%E5%8F%89%E6%A0%91/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%B1%BB.cpp__.htm
作者: dizuo 发布时间: 2011-06-13
查找结点P和Q的共同祖先:
当结点结构中有一个指向父节点的指针:parent,或者二叉树是二分搜索树比较简单:
http://www.cnblogs.com/chenwenbiao/archive/2011/05/26/2058261.html
对于一般的二叉树只能这么整了:
http://www.cnblogs.com/chenwenbiao/archive/2011/05/26/2058139.html
当结点结构中有一个指向父节点的指针:parent,或者二叉树是二分搜索树比较简单:
http://www.cnblogs.com/chenwenbiao/archive/2011/05/26/2058261.html
对于一般的二叉树只能这么整了:
http://www.cnblogs.com/chenwenbiao/archive/2011/05/26/2058139.html
作者: dizuo 发布时间: 2011-06-13
lz,我想你可以结贴了,问题搞定~
作者: dizuo 发布时间: 2011-06-13