易语言教程_易语言源码_易语言写挂_易语言论坛_看流星社区

 找回密码
 注册
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
零基础辅助入门教学 原创 高清 专业课程售后(每日解答)
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
赞助广告位 请点击这里联系站长 QQ20209081
楼主: 可乐彩

植物大战僵尸攻击修改教程

[复制链接]
发表于 2012-5-3 15:38:28 | 显示全部楼层
发表于 2012-7-5 15:41:16 | 显示全部楼层
啊啊啊啊
发表于 2012-7-5 16:20:00 | 显示全部楼层
aaaaaaaaaaaaaaaaaaa
发表于 2012-7-20 10:55:47 | 显示全部楼层
嗯看看!!!
发表于 2012-12-20 14:58:42 | 显示全部楼层
收藏研究研究
发表于 2013-2-5 11:11:13 | 显示全部楼层
支持流星,看看
发表于 2013-2-6 16:22:14 | 显示全部楼层
二叉树遍历,二叉树的建立与遍历,二叉树的应用。
编历二叉树

所谓遍历二叉树,就是遵从某种次序,访问二叉树中的所有结点,使得每个结点仅被访问一次。

这里提到的“访问”是指对结点施行某种操作,操作可以是输出结点信息,修改结点的数据值等,但要求这种访问不破坏它原来的数据结构。在本书中,我们规定访问是输出结点信息data,且以二叉链表作为二叉树的存贮结构。
由于二叉树是一种非线性结构,每个结点可能有一个以上的直接后继,因此,必须规定遍历的规则,并按此规则遍历二叉树,最后得到二叉树所有结点的一个线性序列。 令L,R,D分别代表二叉树的左子树、右子树、根结点,则遍历二叉树有6种规则:DLR、DRL、LDR、LRD、RDL、RKD。若规定二叉树中必须先左后右(左右顺序不能颠倒),则只有DLR、LDR、LRD三种遍历规则。DLR称为前根遍历(或前序遍历、先序遍历、先根遍历),LDR称为中根遍历(或中序遍历),LRD称为后根遍历(或后序遍历)。


本帖隐藏的内容需要回复才可以浏览
一、前序遍历
所谓前序遍历,就是根结点最先遍历,其次左子树,最后右子树。

1.递归遍历

前序遍历二叉树的递归遍历算法描述为:
若二叉树为空,则算法结束;否则
(1)访问根结点;
(2)前序遍历左子树;
(3)前序遍历右子树;


例如,可以利用上面介绍的遍历算法,写出上图所示二叉树的前序遍历序列为:ABDEGHICF

算法如下
void preorder(NODE p)
{
if(p!=NULL)
{printf(“%d ”,p-data);
preorder(p-lchild);
preorder (p-rchild);}
}

遍历方案

1.遍历方案
     从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
     (1)访问结点本身(N),
     (2)遍历该结点的左子树(L),
     (3)遍历该结点的右子树(R)。
以上三种操作有六种执行次序:
     NLR、LNR、LRN、NRL、RNL、RLN。
  注意:
     前三种次序与后三种次序对称,故只讨论先左后右的前三种次序。

2.三种遍历的命名
     根据访问结点操作发生位置命名:
  ① NLR:前序遍历(PreorderTraversal亦称(先序遍历))
         ——访问结点的操作发生在遍历其左右子树之前。
  ② LNR:中序遍历(InorderTraversal)
        ——访问结点的操作发生在遍历其左右子树之中(间)。
  ③ LRN:后序遍历(PostorderTraversal)
        ——访问结点的操作发生在遍历其左右子树之后。
  注意:
     由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtlee)和R(Right subtree)又可解释为根、根的左子树和根的右子树。NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。

遍历算法

1.中序遍历的递归算法定义:
     若二叉树非空,则依次执行如下操作:
         (1)遍历左子树;
         (2)访问根结点;
         (3)遍历右子树。

2.先序遍历的递归算法定义:
    若二叉树非空,则依次执行如下操作:
         (1) 访问根结点;
         (2) 遍历左子树;
         (3) 遍历右子树。

3.后序遍历得递归算法定义:
    若二叉树非空,则依次执行如下操作:
         (1)遍历左子树;
         (2)遍历右子树;
         (3)访问根结点。

4.中序遍历的算法实现
     用二叉链表做为存储结构,中序遍历算法可描述为:
      void InOrder(BinTree T)
        { 算法里①~⑥是为了说明执行过程加入的标号
          ① if(T) {  如果二叉树非空
          ②    InOrder(T-lchild);
          ③    printf(%c,T-data);  访问结点
          ④    InOrder(T-rchild);
          ⑤  }
          ⑥ }  InOrder

遍历序列

1.遍历二叉树的执行踪迹
     三种递归遍历算法的搜索路线相同(如下图虚线所示)。
具体线路为:
     从根结点出发,逆时针沿着二叉树外缘移动,对每个结点均途径三次,最后回到根结点。
      

2.遍历序列
(1) 中序序列
    中序遍历二叉树时,对结点的访问次序为中序序列
 【例】中序遍历上图所示的二叉树时,得到的中序序列为:
                D B A E C F
(2) 先序序列
    先序遍历二叉树时,对结点的访问次序为先序序列
    【例】先序遍历上图所示的二叉树时,得到的先序序列为:
                A B D C E F
(3) 后序序列
     后序遍历二叉树时,对结点的访问次序为后序序列
 【例】后序遍历上图所示的二叉树时,得到的后序序列为:
                D B E F C A
  注意:
  (1) 在搜索路线中,若访问结点均是第一次经过结点时进行的,则是前序遍历;若访问结点均是在第二次(或第三次)经过结点时进行的,则是中序遍历(或后序遍历)。只要将搜索路线上所有在第一次、第二次和第三次经过的结点分别列表,即可分别得到该二叉树的前序序列、中序序列和后序序列。
  (2) 上述三种序列都是线性序列,有且仅有一个开始结点和一个终端结点,其余结点都有且仅有一个前趋结点和一个后继结点。为了区别于树形结构中前趋(即双亲)结点和后继(即孩子)结点的概念,对上述三种线性序列,要在某结点的前趋和后继之前冠以其遍历次序名称。
【例】上图所示的二叉树中结点C,其前序前趋结点是D,前序后继结点是E;中序前趋结点是E,中序后继结点是F;后序前趋结点是F,后序后继结点是A。但是就该树的逻辑结构而言,C的前趋结点是A,后继结点是E和F。

层次编历二叉树
算法思想:利用队列基本操作
1.初始化:根结点入队列
2.while(队列非空)
{
a.队首元素出队列
b.原队首元素对应的左、右孩子(非空)入队列
}
按出队列元素的先后顺序排列即为层次遍历的结果

void lev_ traverse(T)
NODE T;

{NODE q[100];
int head,tail, i;
q[0]=T;head=0;tail=1;
while(headtail)
{p=q[head++];
printf(“%c”,T-data);
if(p-lchild!=NULL)
q[tail++]=p-lchild;
if(p-rchild!=NULL)
q[tail++]=p-rchild;
}
二叉链表的构造

1. 基本思想
     基于先序遍历的构造,即以二叉树的先序序列为输入构造。
  注意:
     先序序列中必须加入虚结点以示空指针的位置。
 【例】
  建立上图所示二叉树,其输入的先序序列是:ABD∮∮CE∮∮F∮∮。

2. 构造算法
     假设虚结点输入时以空格字符表示,相应的构造算法为:
     void CreateBinTree (BinTree T)
      { 构造二叉链表。T是指向根指针的指针,故修改T就修改了实参(根指针)本身
        char ch;
        if((ch=getchar())=='') T=NULL; 读人空格,将相应指针置空
        else{ 读人非空格
              T=(BinTNode )malloc(sizeof(BinTNode)); 生成结点
              (T)-data=ch;
              CreateBinTree(&(T)-lchild); 构造左子树
              CreateBinTree(&(T)-rchild); 构造右子树
             }
      }
  注意:
     调用该算法时,应将待建立的二叉链表的根指针的地址作为实参。
【例】
 设root是一根指针(即它的类型是BinTree),则调用CreateBinTree(&root)后root就指向了已构造好的二叉链表的根结点。
发表于 2013-2-7 17:13:25 | 显示全部楼层
学习,学习
发表于 2013-2-8 18:36:01 | 显示全部楼层
驱蚊器尾气
发表于 2013-2-13 19:34:22 | 显示全部楼层
学学    应该还不错  支持楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|看流星社区  |网站地图

GMT+8, 2018-6-21 02:34 易语言论坛 易语言导航

Powered by 看流星社区 X3.2

©2011-2016 最好的辅助编程技术论坛

快速回复 返回顶部 返回列表