二叉树遍历 实验报告.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

二叉树遍历实验报告

完全二叉树:若设二叉树的深度为h,除第h层外,其它各层(1~h-1)的结点数都达到最大个数,第h层所有的结点都连续集中在最左边,这就是完全二叉树。完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

特点:1)所有的叶节点都出现在最后一层或倒数第二层

2)任一节点,其左子树的最大层数和右子树最大层数相同或比其大一层。

3)最后一个叶节点为节点长度/2(第一个节点记作0,所以向下取整,记作i),叶节点的左子树根节点为2*i+1,若存在右子树,则右子树根节点为2*i+2。

完全二叉树

代码:

创建节点类(Node)

package?NO1;

//创建节点类

public?class?Node?{

????private?String?value;

????private?Node?leftNode;

????private?Node?rightNode;

????public?Node(String?value)?{

????????this.value=value;

????}

????public?Node()?{}

????public?String?getValue()?{

????????return?value;

????}

????public?void?setValue(String?value)?{

????????this.value?=?value;

????}

????public?Node?getLeftNode()?{

????????return?leftNode;

????}

????public?void?setLeftNode(Node?leftNode)?{

????????this.leftNode?=?leftNode;

????}

????public?Node?getRightNode()?{

????????return?rightNode;

????}

????public?void?setRightNode(Node?rightNode)?{

????????this.rightNode?=?rightNode;

????}

}

创建二叉树类

package?NO1;

import?java.util.List;

import?java.util.ArrayList;

//完全二叉树类

public?class?BinaryTree?{

????private?Node?root;?//根节点

????public?BinaryTree(String?value)?{

????????Node?node=new?Node(value);

????????root=node;

????}

????public?BinaryTree()?{}

????public?Node?getRoot()?{

????????return?root;

????}

????public?void?setRoot(Node?root)?{

????????this.root?=?root;

????}

}

添加完全二叉树节点方法(addNodes)

public?void?addNodes(String?a[])?{

????????List<Node>?list=new?ArrayList<>();

????????for(int?i=0;i<a.length;i++)

????????{

????????????Node?node=new?Node(a[i]);

????????????list.add(node);

????????}

????????root=list.get(0);

????????for(int?i=0;i<a.length/2;i++)

????????{

????????????list.get(i).setLeftNode(list.get(2*i+1));

????????????if(2*i+2<=a.length-1)

????????????{

????????????????list.get(i).setRightNode(list.get(2*i+2));

????????????}

????????}

????}

添加遍历方法

public?void?preorder(Node?node,List<String>?list)?{??//前序排列

????????if(node!=null)

????????{

????????????list.add(node.getValue());

????????????preorder(node.getLeftNode(),

文档评论(0)

企业管理 + 关注
实名认证
服务提供商

计算机三级持证人

从事多年企业管理、在团队建设、员工培训、营销提升、组织架构有多自己的经验,希望在这个平台分享及帮助更多的公司或企业!

领域认证该用户于2023年05月09日上传了计算机三级

1亿VIP精品文档

相关文档