树与二叉树
弱者
爱猫忍者
展开
-
由前序和中序遍历构建一颗二叉树
这个算法本身是存在问题的,不细究。等大四我再写一个完善的算法。考试的时候可以写这个算法,思路没错,但是有种特殊情况这个算法没考虑。#include#includeusing namespace std;struct Betree{ char c; Betree *lchild,*rchild;};char fore[100],mid[100];void preorder(Betre原创 2014-02-25 16:34:52 · 1079 阅读 · 0 评论 -
二叉树前序遍历的非递归算法
二叉树的前序遍历是先根节点,然后如果有左子树则再先序遍历左子树,然后如果有右子树则再先序遍历其又子树。递归算法如下 void preorder(Betree *t){ if(t==null) return;visit(t);//访问该节点preorder(t->lchild);preorder(t->rchild); }当然递归算法是隐式使用了栈。我们仔细分析这个过程,先是原创 2014-02-26 22:42:08 · 1783 阅读 · 0 评论 -
二叉树的层次遍历的算法
二叉树的层次遍历指的是从二叉树的根节点,按照从上到下从左向右依次遍历。首先要访问头结点,然后将其压入队列中,然后取出该元素,访问之并且将该元素的孩子(为空时不加入,也不访问)按照先左后右的顺序压入队列......依次进行,知道访问完所有的元素,也就是队列为空了。伪代码如下void trave(Betree *p){ if(p==NULL) return;//空树没有访问的必要原创 2014-02-27 15:30:53 · 1860 阅读 · 0 评论 -
求解二叉树高度的递归算法
二叉树的高度就是1+max{height(root->light),height(root->right)},从而有了递归算法的求解思路。int height(Betree *p){ if(p==NULL) hi=0; else { if(p->lchild==NULL) lh=0; else lh=height(p->lchild);//递归求解左子树的高度原创 2014-02-27 15:08:43 · 4410 阅读 · 0 评论 -
构建一棵二叉树并按照层次遍历输出
这个算法中的构建一棵二叉树用的是前序和中序来构建二叉树的。层次遍历当然要用到队列了。#include#include#include#includeusing namespace std;struct node{ char c; node *lchild,*rchild;};char pre[100],mid[100];void build(node* &t,int原创 2014-04-06 21:25:03 · 5196 阅读 · 0 评论 -
将一棵二叉树的全部节点的左右子树交换顺序
模拟了层次遍历的算法。#include#include#include#includeusing namespace std;struct node{ char c; node *lchild,*rchild;};char pre[100];char mid[100];void build(node* &t,int start1,int end1,int start2,原创 2014-04-06 23:42:11 · 6605 阅读 · 1 评论 -
二叉树常见非递归操作
层次遍历函数中的count是用来计数这一层多少个节点的原创 2014-10-11 19:11:02 · 702 阅读 · 0 评论 -
九度OJ 1035找出直系亲属
题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如果A,B是C的(外)祖父,祖母,则A,B是C的grandparent,C是A,B的grandchild,如果A,B是C的(外)曾祖父,曾祖母,则A,B是C的great-grandparent,C是A,B的great-grandchild,之后再多一辈,则在关系上加一个great-。输入:原创 2015-03-01 16:38:10 · 1053 阅读 · 0 评论 -
已知二叉树的前序和中序序列,不建立二叉树来输出后序序列
关于不建立这棵二叉树来求解这棵树的后序序列,可以这么考虑:其实求解一棵二叉树的后序序列等价于求解左子树的后序序列+右子树的后序序列+根节点,这是一个递归的考虑过程。原创 2015-10-03 23:09:37 · 608 阅读 · 0 评论