`
y806839048
  • 浏览: 1120526 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

复杂代码的书写--树的层序遍历和前序创建例子

阅读更多

1,先画出思路图,然后一级一级需求实现,缺的后面补,重复的抽象

2,围绕核心操作展开一系列操作的编程方式

3,抽象出类似代码的结构---迭代方法的前后关系

 

 

数的图形,数的存储,迭代的代码,都有前,中,后,层序,在相互转化的时候注意用的顺序要一致

 

一般树的存储用链表,用完就没,顺序的前后反应在代码中是业务方法和自身调用方法的前后

 

 

前序遍历树的创建:nod首先是前序的

 

 

 public Node createNode(LinkList<String> nod,Node root){

 

  

          if(nod==null ||nod.size==0)

 

  return;

              

 

       String data = nod.poll();

 

       if(data!=null)

           root = new Node();//创建没有根之说,需要一个一个创建

                   root.setData(data);

                  createNode(nod,root.lChild);

  createNode(nod,root.rChild);

   else{

    root=null;

 

   }

 

   return root;//由于迭代的特性返回的是最初的根

 

 

}

 

 

 

 

 

 

层序遍历:

 

//前序遍历的输入,每层打印自己的,准备好下层

 

public void cengx(Node node){

 

    if(node==null)

        return ;

 

    system.out.print(node.data+" ");

 List<Node> nodeList = new ArrayList<Node>();

 if(node.lchild!=null){

   nodeList.add(node.lchild);

  

  }

  if(node.rchild!=null){

   nodeList.add(node.rchild);

  }

   cxzy(nodeList);//所有子节点

 

    

 

}

 

 

 

cxzy(List<Node> nodeList){

 

List<Node> newnodeList = new ArrayList<Node>();

 

for(nodeList){

  if(nl.lchild!=null){

   newnodeList.add(nl.lchild);

  

  }

  if(nl.rchild!=null){

   newnodeList.add(nl.rchild);

  }

 system.out.print(nl.data+" ");

}

 

 

 

   if(newnodeList.size!=null)

     cxzy(newnodeList);

 

 

      

      }

 

 

 

 

 

 

 

用对了数据结构或分类恰当,就会有标准的递归,不用一个起头的函数

 

 

 

public void levelOrder() {

    BiTNode<E> node =root;

    LinkedList<BiTNode<E>> list = new LinkedList<>();

    list.add(node);

    while(!list.isEmpty()) {

        node=list.poll();

        System.out.print(node.data);

        if(node.lchild!=null)

            list.offer(node.lchild);

        if(node.rchild!=null)

            list.offer(node.rchild);

    }

}

 

 

 

 

 

参考:

https://blog.csdn.net/jjf09/article/details/70530159    树的创建

 

 

 

分享到:
评论

相关推荐

    folder-explorer-1.0.4文件夹遍历软件

    扫描目录,分析文件结构和统计信息,给任意文件添加备注,导出带注释的树形文本和其它多种数据格式,大大方便书写技术文档。来源:https://github.com/d2-projects/folder-explorer,包含:dmg和exe两种版本。没有...

    JavaEE三层架构-环境搭建、架构思想、代码书写-指导手册.doc

    3. **数据访问层(Data Access Layer)**:负责数据库操作,如CRUD(创建、读取、更新和删除)操作,通常使用JDBC或者ORM框架(如Hibernate、MyBatis)来实现。这一层隔离了业务逻辑层与数据库系统的交互,使得应用...

    Lua代码规范-代码书写规范

    - **遍历**:对table进行迭代时,为key和value赋予有意义的名称。 - **空表判断**:使用`next(tb) == nil`检测表是否为空,而不是`#tb == 0`。 - **数组使用**:避免在table中存储nil值,数组下标从1开始,没有0。 ...

    二叉树建立过程,课程设计

    - **递归构造二叉树**:基于前序和中序遍历序列,使用递归方法构建二叉树。 - **异常处理**:确保程序能够处理各种异常输入,并给出相应的提示信息。 - **动画显示实现**:使用图形库(如OpenGL或WPF)实现动态显示...

    c++二叉树的建立及先序后序中序遍历

    本篇文章将详细介绍如何使用C++语言实现二叉树的基本操作:创建、前序遍历、中序遍历以及后序遍历。 #### 二叉树的基本概念 二叉树(Binary Tree)是一种树形结构,其中每个节点最多有两个子节点,分别称为左子节点...

    java代码书写规范

    在Java编程中,代码的书写规范是非常重要的,它有助于提高代码的可读性,便于团队协作和后期维护。以下是一些关键的命名规则和书写规范: 1. **命名规则**: - **通用规则**:所有命名应该使用标准的英文单词或...

    中考与汉字书写-书法欣赏决战中考2021系列.ppt

    中考与汉字书写-书法欣赏决战中考2021系列.ppt

    会说话的代码 书写自表达代码之道-高清-完整目录-2013年8月

    会说话的代码 书写自表达代码之道-高清-完整目录-2013年8月

    PHP代码书写规范

    PHP代码书写规范是为了提高代码可读性、可维护性和团队协作效率而设立的一套指导原则。这些规范涵盖了文件命名、变量、常量、函数、类以及编码格式等多个方面。遵循这些规范,可以帮助程序员避免常见的错误,提升...

    方程式书写-非金属及其化合物20190109.doc

    方程式书写-非金属及其化合物20190109.doc

    源代码书写规范

    源代码书写规范是编程实践中的一项重要准则,旨在提高代码的可读性、可维护性和一致性。良好的代码规范能够使得开发者之间的协作更为顺畅,减少因理解差异导致的沟通成本,同时也有助于降低引入错误的可能性。 1. ...

    javascript for-in有序遍历json数据并探讨各个浏览器差异

    根据 ECMA-262(ECMAScript)第三版中描述,for-in 语句的属性遍历的顺序是由对象定义时属性的书写顺序决定的。 关于 ECMA-262(ECMAScript)第三版中 for-in 语句的更多信息,请参考 ECMA-262 3rd Edition 中 12.6....

    matlab矩阵的乘法代码书写-LinAlg:用于异构超级计算机的小型可扩展矩阵库

    matlab矩阵的乘法代码书写林阿尔格 用于异构超级计算机的小型可扩展矩阵库 如果你觉得你花了太多时间来调整你的算法以适应超级计算机上常见的库:LinAlg 是一个 C++ 库,为对 BLAS、LAPACK、CUDA:copyright:、MPI、...

    JAVA的代码书写规范

    JAVA代码书写规范是Java开发者必须遵循的指导原则,旨在提高代码的可读性、可维护性和团队协作效率。本文将详细解析这些规范,以便初学者和经验丰富的开发者都能理解和实施。 1. **缩进** 缩进是代码布局的关键,...

Global site tag (gtag.js) - Google Analytics