zoukankan      html  css  js  c++  java
  • 二叉树节点数据结构练习 5 二叉树的建立 遍历

    PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!

        二叉树是数据结构的最主要的内容之一,之所以引入二叉树,是因为精良的数据结构非常有助于数据的排序,查询等操作,也是在空间和效率上做个平衡!!

        二叉树的定义:每个节点至多有俩颗子树(即二叉树中不存在度大于2的节点),并且,二叉树的子树有阁下之分,其次序不能恣意颠倒。(摘自《数据结构 c语言》严蔚敏 版,如有维权,可发送至:shenganbeiyang@163.com,本人将当即删除)

       形如:

                                                                                                                            二叉树和节点

                                                                                                                                                                                                                                        

                                                                                                                                             节选自:《数据结构》 严蔚敏 图6.4

      二叉树的分类:满二叉树,完全二叉树,一般二叉树(暂且列举简略的)。

        (a)满二叉树,,根节点的度为1,叶节点的度为0,其余节点的度为2.

        (b)完全二叉树:懂得上很简略,在满二叉树的基础上,去掉序号靠后的节点,注意必须从倒数第一个点算起。b 就是,而c,d 都不是。因此c,d只是一般的二叉树。

        二叉树的几个主要术语: 度,深度,根节点,双亲,叶节点,子树。

        度:每个节点可以有的子节点的个数。深度:层数;根节点:最顶层的那个点;双亲:其实是一个节点,如(a)中4和5的双亲是2;叶节点:度为0的节点;子树:如(a),做标记的部份是1的子树。

      树的相干性质:1,第i层上至多有2的(i-1)次方个节点;

                                   2,深度为k的二叉树至多有2^k-1个节点;

                                   3,度为0 的节点数n0,度为2的节点数n2,则n0=n2+1;

                                   4,主要是关于节点之间的位置关系,啰嗦一堆,其实很简略,就不再贴出来了。

        树的建立和遍历:

                                  包含前序 中序  和后序 ,其实就是元素拜访的次序,比如如上图 (d):前序 124536 ,  中序:425136 , 后序: 452631。简略画画就能够了。

        代码如下:

                                  

        每日一道理
    生命,是一场漫长的棋局。这盘棋没有猎猎西风,没有四起狼烟,只有在取舍和进退中抉择。只有像棋中的小卒那样,勇往直前,毫不退缩沿着沟沟坎坎的人生之路,艰难而执着的求索,前进,才会谱写人生最壮丽的强者之歌。
    /*
    email:shengbaiyang@163.com
    qq:501968942
    */
    
    #include<iostream>
    using namespace std;
    struct Tnode
    {
     char value;
     struct Tnode* lChild;
     struct Tnode* rChild;
    
    };
    typedef Tnode* BiTree;
    
     void InitBiTree(BiTree& T)
    {
     
    
      char inChar=getchar();
      //# 表示空节点,但是也要输入,为了保证树的完整性
      if(inChar=='#')
    	  T=0;
      else
      {
       T=(BiTree)malloc(sizeof(Tnode));
       if(!T) throw "Invalid Address";
        else
    	{
       T->value=inChar;
       InitBiTree(T->lChild);
       InitBiTree(T->rChild);
        }
      
      }
     
     
    }
    //前序拜访
    void PreOrder(BiTree & T)
    {
    	
      if(T)
      {
    	  cout<<"node is: "<<T->value<<endl;
    	  PreOrder(T->lChild);
    	  PreOrder(T->rChild);
      
      }
    
    
    }
    //中虚拜访
    void InOrder(BiTree &T)
    {
    	
    	if(T)
    	{   InOrder(T->lChild);
    		cout<<"node is : "<<T->value<<endl;
    		InOrder(T->rChild);
    	
    	}
    
    
    }
    //后续拜访
    void PostOrder(BiTree &T)
    {
    	
    	if(T)
    	{  
    		PostOrder(T->lChild);
    		PostOrder(T->rChild);
    		cout<<"node is : "<<T->value<<endl;
    		
    	
    	
    	}
    
    
    }
    
    
    int main()
    {
    
     
     
    BiTree t;
    cout<<"请输入节点值:";
    InitBiTree(t);
    cout<<"前序拜访:"<<endl;
    PreOrder(t);
    cout<<"中序拜访:"<<endl;
    InOrder(t);
    cout<<"后序拜访:"<<endl;
    PostOrder(t);
    
    
     
    
    }

        
    输入:124##5##3#6

                           二叉树和节点                           

        可见,与之前手工推导结果一致,注意一定不要漏了 #,否则 不但输出结果有误,而且 不能畸形如期运行

    文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。

    --------------------------------- 原创文章 By
    二叉树和节点
    ---------------------------------

  • 相关阅读:
    js:语言精髓笔记1--标识符与基本类型
    ember.js:使用笔记4 数组数据的分组显示
    ember.js:使用笔记3 活用{{bind-attr}}
    ember.js:使用笔记2-数据删除与存储
    ember.js:使用笔记1-数组数据统一显示
    工具:使用jekyll生成静态网站
    css:删除:×的效果
    js写随机一个颜色
    回调函数的使用
    jquery获取select标签的选中元素
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3097748.html
Copyright © 2011-2022 走看看