A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lantian 初级黑马   /  2012-7-8 20:11  /  2489 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

遍历二叉树深度。java代码具体怎么实现? 有木有代码??

10 个回复

倒序浏览
本帖最后由 蒋映辉 于 2012-7-8 20:28 编辑

这个 百度来的
**
* 二叉树测试二叉树顺序存储在treeLine中,递归前序创建二叉树。另外还有能
* 够前序、中序、后序、按层遍历二叉树的方法以及一个返回遍历结果asString的
* 方法。
*/

public class BitTree {
public static Node2 root;
public static String asString;

//事先存入的数组,符号#表示二叉树结束。
public static final char[] treeLine = {'a','b','c','d','e','f','g',' ',' ','j',' ',' ','i','#'};

//用于标志二叉树节点在数组中的存储位置,以便在创建二叉树时能够找到节点对应的数据。
static int index;

//构造函数
public BitTree() {
System.out.print("测试二叉树的顺序表示为:");
System.out.println(treeLine);
this.index = 0;
root = this.setup(root);
}

//创建二叉树的递归程序
private Node2 setup(Node2 current) {
if (index >= treeLine.length) return current;
if (treeLine[index] == '#') return current;
if (treeLine[index] == ' ') return current;
current = new Node2(treeLine[index]);
index = index * 2 + 1;
current.left = setup(current.left);
index ++;
current.right = setup(current.right);
index = index / 2 - 1;
return current;
}

//二叉树是否为空。
public boolean isEmpty() {
if (root == null) return true;
return false;
}

//返回遍历二叉树所得到的字符串。
public String toString(int type) {
if (type == 0) {
asString = "前序遍历:\t";
this.front(root);
}
if (type == 1) {
asString = "中序遍历:\t";
this.middle(root);
}
if (type == 2) {
asString = "后序遍历:\t";
this.rear(root);
}
if (type == 3) {
asString = "按层遍历:\t";
this.level(root);
}
return asString;
}

//前序遍历二叉树的循环算法,每到一个结点先输出,再压栈,然后访问它的左子树,
//出栈,访问其右子树,然后该次循环结束。
private void front(Node2 current) {
StackL stack = new StackL((Object)current);
do {
if (current == null) {
current = (Node2)stack.pop();
current = current.right;
} else {
asString += current.ch;
current = current.left;
}
if (!(current == null)) stack.push((Object)current);
} while (!(stack.isEmpty()));
}

//中序遍历二叉树
private void middle(Node2 current) {
if (current == null) return;
middle(current.left);
asString += current.ch;
middle(current.right);
}

//后序遍历二叉树的递归算法
private void rear(Node2 current) {
if (current == null) return;
rear(current.left);
rear(current.right);
asString += current.ch;
}

}


/**
* 二叉树所使用的节点类。包括一个值域两个链域
*/

public class Node2 {
char ch;
Node2 left;
Node2 right;

//构造函数
public Node2(char c) {
this.ch = c;
this.left = null;
this.right = null;
}

//设置节点的值
public void setChar(char c) {
this.ch = c;
}

//返回节点的值
public char getChar() {
return ch;
}

//设置节点的左孩子
public void setLeft(Node2 left) {
this.left = left;
}

//设置节点的右孩子
public void setRight (Node2 right) {
this.right = right;
}

//如果是叶节点返回true
public boolean isLeaf() {
if ((this.left == null) && (this.right == null)) return true;
return false;
}
}

回复 使用道具 举报
建议多看看毕姥爷的视频!!他讲的很清楚,直接要代码的不利于理解!!
回复 使用道具 举报
有源码才能好学习。直接研究啊!!Q!
回复 使用道具 举报
递归实现,大概就是这样:


  1. public class Tree{
  2.         private TreeNode root=null;

  3.         private int getDepth0(TreeNode tn){
  4.                 if(tn==null)
  5.                         return 0;
  6.                 int leftDepth=getDepth0(tn.left);
  7.                 int rightDepth=getDepth0(tn.right);
  8.                 if(leftDepth>rightDepth)
  9.                         return leftDepth+1;
  10.                 else
  11.                         return rightDepth+1;
  12.         }

  13.         public int getDepth(){
  14.                 return getDepth0(root);
  15.         }
  16.         
  17. }

  18. class TreeNode{
  19.         protected TreeNode left;
  20.         protected TreeNode right;
  21. }

复制代码
回复 使用道具 举报
蒋映辉 发表于 2012-7-8 20:17
这个 百度来的
**
* 二叉树测试二叉树顺序存储在treeLine中,递归前序创建二叉树。另外还有能

:)ths   :handshake
回复 使用道具 举报
二叉树在数据结构的课本上有详细介绍哦。
回复 使用道具 举报
1、先根遍历
public void preorder(BinaryNode root){
if(root == null)
  return;
visit (root);
preorder(root.left);
preorder(root.right);
}
2、后根遍历
public void postorder(BinaryNode root){
if(root == null)
  return;
preorder(root.left);
preorder(root.right);
visit (root);
}
3、中根遍历
public voidinorder(BinaryNode root){
if(root == null)
  return;
preorder(root.left);
visit (root);
preorder(root.right);
}

书上的。。。。
回复 使用道具 举报
位丹丹 发表于 2012-7-8 21:25
1、先根遍历
public void preorder(BinaryNode root){
if(root == null)

先根遍历节点的访问次序:ABCDEFGHI
后根遍历节点的访问次序:EDFCBHIGA
中根遍历节点的访问次序:DECFBAHGI

无标题.png (85.64 KB, 下载次数: 25)

二叉树

二叉树
回复 使用道具 举报
这是数据结构课本中的内容,楼主可以看看有关的书
回复 使用道具 举报
遍历判断两树深度大小就O了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马