Java实现二叉树的遍历Word下载.docx
- 文档编号:18748502
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:58
- 大小:79.26KB
Java实现二叉树的遍历Word下载.docx
《Java实现二叉树的遍历Word下载.docx》由会员分享,可在线阅读,更多相关《Java实现二叉树的遍历Word下载.docx(58页珍藏版)》请在冰豆网上搜索。
(一)二叉树结构实现
Java代码
1.package
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
2
<
54.
rootNode.left
recurCreateFullBiTree(num
2,
55.
//如果还可以创建右子树,则创建
56.
1
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.
e
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.
;
//15
117.
118.
119.
//创建一个完全二叉树
120.
121.
binTree.createFullBiTree(14);
122.
//14
123.
//7
124.
125.
//创建一棵非完全二叉树
126.
127.
int[]
{
3,
4,
0,
5,
6,
7,
8
};
128.
binTree.createBinTree(nums);
129.
//8
130.
131.
132.
133.}
(二)利用二叉树本身特点进行递归遍历(属内部遍历)
由于二叉树所具有的递归性质,一棵非空的二叉树可以看作是由根节点、左子树和右子树3部分构成,因为若能依次遍历这3部分的信息,也就遍历了整个二叉树。
按照左子树的遍历在右子树的遍历之前进行的约定,根据访问根节点位置的不同,可以得到二叉的前序、中序、后序3种遍历方法。
2.
3./**
二叉树的三种
内部
遍历:
前序、中序、后序
但不管是哪种方式,左子树的遍历在右子树的遍历之前遍历是这有三种遍历方式都
必须遵循的约定
10.public
BinTreeInOrder
extends
11.
节点访问者,可根据需要重写visit方法
abstract
Visitor
visit(Object
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(中缀)
//先遍历左节点
//再遍历父节点
postOrder(Visitor
postOrder(v,
树的后序递归遍历
post=postfix(后缀)
//再遍历右节点
//最后遍历父节点
//创建二叉树
treeOrder
BinTreeInOrder();
treeOrder.createBinTree(nums);
前序遍历
treeOrder.preOrder(new
Visitor()
});
中序遍历
treeOrder.inOrder(new
后序遍历
treeOrder.postOrder(new
/*
output:
4
6
3
5
7
97.}
(三)二叉树的非递归遍历(属外部遍历)
1、利用栈与队列对二叉树进行非递归遍历
3.import
4.import
5.import
7./**
二叉树的外部遍历:
深度优先(先根)、广度(层次)优先遍历
13.public
BinTreeOutOrder
二叉树深序优先遍历(即二叉树的先根遍历)迭代器,外部可以使用该迭代器
进行非递归的遍历,这是一种在二叉树结构外部的一种遍历算法,它没有使用
二叉树本身的结构特点(左右子树递归)进行递归遍历
DepthOrderIterator
implements
Iterator
//栈里存放的是每个节点
Stack
stack
Stack();
DepthOrderIterator(Entry
//根入栈,但在放入左右子节点前会马上出栈,即根先优于左右子节点访问
stack.push(node);
//是否还有下一个元素
boolean
hasNext()
(stack.isEmpty())
false;
true;
//取下一个元素
next()
(hasNext())
//取栈顶元素
treeNode
stack.pop();
//先访问根
(treeNode.right
stack.push(treeNode.right);
//再放入右子节点
(treeNode.left
stack.push(treeNode.left);
//最后放入左子节点,但访问先于右节点
//
返回遍历得到的节点
treeNode;
}
else
如果栈
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 实现 二叉 遍历