Java实现二叉树的遍历Word格式.docx

上传人:b****6 文档编号:22265400 上传时间:2023-02-03 格式:DOCX 页数:84 大小:88.47KB
下载 相关 举报
Java实现二叉树的遍历Word格式.docx_第1页
第1页 / 共84页
Java实现二叉树的遍历Word格式.docx_第2页
第2页 / 共84页
Java实现二叉树的遍历Word格式.docx_第3页
第3页 / 共84页
Java实现二叉树的遍历Word格式.docx_第4页
第4页 / 共84页
Java实现二叉树的遍历Word格式.docx_第5页
第5页 / 共84页
点击查看更多>>
下载资源
资源描述

Java实现二叉树的遍历Word格式.docx

《Java实现二叉树的遍历Word格式.docx》由会员分享,可在线阅读,更多相关《Java实现二叉树的遍历Word格式.docx(84页珍藏版)》请在冰豆网上搜索。

Java实现二叉树的遍历Word格式.docx

tree.bintree;

2./** 

3. 

创建 

非完全二叉树、完全二叉树、满二叉树 

4. 

5. 

由于二叉树的节点增加没有什么规则,所以这里只是简单的使用了递一 

6. 

次性把整棵树创建出来,而没有设计出一个一个添加节点的方法与删除 

7. 

 

8. 

@author 

jzj 

9. 

@date 

2009-12-23 

10. 

*/ 

11.public 

class 

BinTree 

{// 

Bin=Binary(二进位的, 

二元的) 

12. 

13. 

protected 

Entry 

root;

//根 

14. 

private 

int 

size;

//树的节点数 

15. 

16. 

/** 

17. 

树的节点结构 

18. 

19. 

20. 

21. 

static 

22. 

elem;

//数据域,这里我们作为编号 

23. 

left;

//左子树 

24. 

right;

//右子树 

25. 

26. 

public 

Entry(int 

elem) 

27. 

this.elem 

28. 

29. 

30. 

String 

toString() 

31. 

return 

"

number="

32. 

33. 

34. 

35. 

36. 

根据给定的节点数创建一个完全二叉树或是满二叉树 

37. 

@param 

nodeCount 

要创建节点总数 

38. 

39. 

void 

createFullBiTree(int 

nodeCount) 

40. 

root 

recurCreateFullBiTree(1, 

nodeCount);

41. 

42. 

43. 

44. 

递归创建完全二叉树 

45. 

num 

节点编号 

46. 

节点总数 

47. 

@return 

TreeNode 

返回创建的节点 

48. 

49. 

recurCreateFullBiTree(int 

num, 

50. 

size++;

51. 

rootNode 

new 

Entry(num);

//根节点 

52. 

//如果有左子树则创建左子树 

53. 

if 

(num 

<

54. 

rootNode.left 

recurCreateFullBiTree(num 

2, 

55. 

//如果还可以创建右子树,则创建 

56. 

57. 

rootNode.right 

1, 

58. 

59. 

60. 

(Entry) 

rootNode;

61. 

62. 

63. 

64. 

根据给定的数组创建一棵树,这个棵树可以是完全二叉树也可是普通二叉树 

65. 

数组中为0的表示不创建该位置上的节点 

66. 

nums 

数组中指定了要创建的节点的编号,如果为0,表示不创建 

67. 

68. 

createBinTree(int[] 

nums) 

69. 

recurCreateBinTree(nums, 

0);

70. 

71. 

72. 

73. 

递归创建二叉树 

74. 

75. 

index 

需要使用数组中的哪个元素创建节点,如果为元素为0,则不创建 

76. 

返回创建的节点,最终会返回树的根节点 

77. 

78. 

recurCreateBinTree(int[] 

nums, 

index) 

79. 

//指定索引上的编号不为零上才需创建节点 

80. 

(nums[index] 

!

0) 

81. 

82. 

Entry(nums[index]);

83. 

84. 

((index 

1) 

nums.length) 

85. 

(index 

1);

86. 

87. 

88. 

2);

89. 

90. 

91. 

92. 

93. 

null;

94. 

95. 

96. 

97. 

size() 

98. 

99. 

100. 

101. 

//取树的最左边的节点 

102. 

getLast() 

103. 

104. 

while 

(e.right 

null) 

105. 

e.right;

106. 

107. 

e.elem;

108. 

109. 

110. 

//测试 

111. 

main(String[] 

args) 

112. 

113. 

//创建一个满二叉树 

114. 

binTree 

BinTree();

115. 

binTree.createFullBiTree(15);

116. 

System.out.println(binTree.size());

//15 

117. 

System.out.println(binTree.getLast());

118. 

119. 

//创建一个完全二叉树 

120. 

121. 

binTree.createFullBiTree(14);

122. 

//14 

123. 

//7 

124. 

125. 

//创建一棵非完全二叉树 

126. 

127. 

int[] 

3, 

4, 

0, 

5, 

6, 

7, 

};

128. 

binTree.createBinTree(nums);

129. 

//8 

130. 

131. 

132. 

133.} 

packagetree.bintree;

/**

*创建非完全二叉树、完全二叉树、满二叉树

*

*由于二叉树的节点增加没有什么规则,所以这里只是简单的使用了递一

*次性把整棵树创建出来,而没有设计出一个一个添加节点的方法与删除

*

*@authorjzj

*@date2009-12-23

*/

publicclassBinTree{//Bin=Binary(二进位的,二元的)

protectedEntryroot;

//根

privateintsize;

//树的节点数

/**

*树的节点结构

*@authorjzj

protectedstaticclassEntry{

intelem;

//数据域,这里我们作为编号

Entryleft;

//左子树

Entryright;

//右子树

publicEntry(intelem){

this.elem=elem;

}

publicStringtoString(){

return"

number="

+elem;

}

*根据给定的节点数创建一个完全二叉树或是满二叉树

*@paramnodeCount要创建节点总数

*/

publicvoidcreateFullBiTree(intnodeCount){

root=recurCreateFullBiTree(1,nodeCount);

*递归创建完全二叉树

*@paramnum节点编号

*@paramnodeCount节点总数

*@returnTreeNode返回创建的节点

privateEntryrecurCreateFullBiTree(intnum,intnodeCount){

size++;

EntryrootNode=newEntry(num);

//根节点

//如果有左子树则创建左子树

if(num*2<

=nodeCount){

rootNode.left=recurCreateFullBiTree(num*2,nodeCount);

//如果还可以创建右子树,则创建

if(num*2+1<

rootNode.right=recurCreateFullBiTree(num*2+1,nodeCount);

}

return(Entry)rootNode;

*根据给定的数组创建一棵树,这个棵树可以是完全二叉树也可是普通二叉树

*数组中为0的表示不创建该位置上的节点

*@paramnums数组中指定了要创建的节点的编号,如果为0,表示不创建

publicvoidcreateBinTree(int[]nums){

root=recurCreateBinTree(nums,0);

*递归创建二叉树

*@paramindex需要使用数组中的哪个元素创建节点,如果为元素为0,则不创建

*@returnTreeNode返回创建的节点,最终会返回树的根节点

privateEntryrecurCreateBinTree(int[]nums,intindex){

//指定索引上的编号不为零上才需创建节点

if(nums[index]!

=0){

size++;

EntryrootNode=newEntry(nums[index]);

//如果有左子树则创建左子树

if((index+1)*2<

=nums.length){

rootNode.left=(Entry)recurCreateBinTree(nums,(index+1)*2-1);

//如果还可以创建右子树,则创建

if((index+1)*2+1<

rootNode.right=(Entry)recurCreateBinTree(nums,(index+1)*2);

}

return(Entry)rootNode;

returnnull;

publicintsize(){

returnsize;

//取树的最左边的节点

publicintgetLast(){

Entrye=root;

while(e.right!

=null){

e=e.right;

returne.elem;

//测试

publicstaticvoidmain(String[]args){

//创建一个满二叉树

BinTreebinTree=newBinTree();

binTree.createFullBiTree(15);

System.out.println(binTree.size());

//15

System.out.println(binTree.getLast());

//创建一个完全二叉树

binTree=newBinTree();

binTree.createFullBiTree(14);

//14

//7

//创建一棵非完全二叉树

int[]nums=newint[]{1,2,3,4,0,0,5,0,6,0,0,0,0,7,8};

binTree.createBinTree(nums);

//8

(二)利用二叉树本身特点进行递归遍历(属内部遍历)

由于二叉树所具有的递归性质,一棵非空的二叉树可以看作是由根节点、左子树和右子树3部分构成,因为若能依次遍历这3部分的信息,也就遍历了整个二叉树。

按照左子树的遍历在右子树的遍历之前进行的约定,根据访问根节点位置的不同,可以得到二叉的前序、中序、后序3种遍历方法。

2. 

3./** 

二叉树的三种 

内部 

遍历:

前序、中序、后序 

但不管是哪种方式,左子树的遍历在右子树的遍历之前遍历是这有三种遍历方式都 

必须遵循的约定 

10.public 

BinTreeInOrder 

extends 

11. 

节点访问者,可根据需要重写visit方法 

abstract 

Visitor 

visit(Object 

ele) 

System.out.print(ele 

);

preOrder(Visitor 

v) 

preOrder(v, 

root);

树的前序递归遍历 

pre=prefix(前缀) 

node 

要遍历的节点 

v, 

node) 

//如果传进来的节点不为空,则遍历,注,叶子节点的子节点为null 

(node 

v.visit(node.elem);

//先遍历父节点 

node.left);

//再遍历左节点 

node.right);

//最后遍历右节点 

inOrder(Visitor 

inOrder(v, 

树的中序递归遍历 

in=infix(中缀) 

//先遍历左节点 

//再遍历父节点 

pu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1