摘要:
分析问题:若一颗二叉树为空,其深度为0,否则,利用其深度等于max{左子树depth,右子树depth}+1,可递归实现:int depth(BiTree T) //树的深度 { if(!T) return 0; int d1 = depth(T -> lchild); int d2 = depth(T -> rchild); return (d1 > d2 ? d1 : d2) + 1; } 阅读全文
摘要:
层次遍历用队列实现:方法一:int visit(BiTree T) { if(T) { printf("%c ",T->data); return 1; } else return 0; } void LeverTraverse(BiTree T) //方法一、非递归层次遍历二叉树 { queue <BiTree> Q; BiTree p; p = T; if(visit(p)==1) Q.push(p); whil... 阅读全文
摘要:
如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:4526731。。1、递归操作:思想:若二叉树为空,返回。否则1)后序遍历右子树;2)后序遍历左子树;3)遍历根节点代码:void PostOrder(BiTree root) { if(root==NULL) return ; PostOrder(root->lchild); //递归调用,后序遍历左子树 PostOrder(root->rchild); //递归调用,后序遍历右子树 printf("%c ", root->... 阅读全文
摘要:
如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:4251637。。1、递归操作:思想:若二叉树为空,返回。否则1)中序遍历左子树;2)访问根节点;3)中序遍历右子树代码:void InOrder(BiTree root) { if(root==NULL) return ; InOrder(root->lchild); //递归调用,中序遍历左子树 printf("%c ", root->data); //输出数据 InOrder(root->rchild); //递归调用,中序遍历右子树 }... 阅读全文
摘要:
如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。遍历结果为:1245367。1、递归操作:思想:若二叉树为空,返回。否则1)遍历根节点;2)先序遍历左子树;3)先序遍历右子树代码:void PreOrder(BiTree root) { if(root==NULL) return ; printf("%c ", root->data); //输出数据 PreOrder(root->lchild); //递归调用,先序遍历左子树 PreOrder(root->rchild); //递归调用,先序遍历右子树 ... 阅读全文
摘要:
二叉树数据结构:typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;假设要建立一颗如下的二叉树,输入为:124##5##36##7##我们采用两种方法递归和非递归1、二叉树的先序递归建立过程(递归就是调用栈进行的操作)直接上代码:void CreateBiTree(BiTree &root) { char ch; //要插入的数据 cin>>ch; if(ch=='#') root = NULL; else ... 阅读全文