先序和中序建立二叉树,然后再输出出来
下面是我的程序,没有错误,可是点击运行之后没有任何结果,请高手指出错误,不胜感激!package binary.tree;public class TreeNode {
char data;
TreeNode lChild;
TreeNode rChild;
public TreeNode()
{
lChild=null;
rChild=null;
}
public TreeNode(char data)
{
this.data=data;
this.lChild=null;
this.rChild=null;
}
}package binary.tree;public class Tree {
TreeNode root;
//从strStart位置开始查找c的在字符数组s中的位置,返回下标
int pos(char c,char s[],int strStart)
{
for(int i=strStart;i<s.length;i++)
{
if(s[i]==c) return i;
}
return -1;
}
//创建一棵树
void createTree(TreeNode root,char[] preOrder,int strStart1,char[] inOrder,int strStart2,int len)
{
int tempLocation;
int rlen;
int llen;
if(len<=0){root=null;return;}
else
{
root=new TreeNode(preOrder[strStart1]);
tempLocation=pos(preOrder[strStart1],inOrder,strStart2);
llen=tempLocation-strStart2;
rlen=len-(llen+1);
createTree(root.lChild,preOrder,strStart1+1,inOrder,strStart2,llen);
createTree(root.rChild,preOrder,strStart1+llen+1,inOrder,tempLocation+1,rlen);
}
}
//遍历这棵树
void inTravelTree(TreeNode root)
{
if(root!=null)
{
inTravelTree(root.lChild);
System.out.println(root.data+"");
inTravelTree(root.rChild);
}
}
}
package binary.tree;public class TreeApp { /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
char[] preOrder={'A','B','C','D','E','F','G','H','I','J','K','L'};
char[] inOrder={'C','E','D','F','B','A','I','H','G','K','J','L'};
Tree tree;
tree=new Tree();
tree.createTree(tree.root, preOrder,0,inOrder, 0, preOrder.length);
tree.inTravelTree(tree.root);
}
}
下面是我的程序,没有错误,可是点击运行之后没有任何结果,请高手指出错误,不胜感激!package binary.tree;public class TreeNode {
char data;
TreeNode lChild;
TreeNode rChild;
public TreeNode()
{
lChild=null;
rChild=null;
}
public TreeNode(char data)
{
this.data=data;
this.lChild=null;
this.rChild=null;
}
}package binary.tree;public class Tree {
TreeNode root;
//从strStart位置开始查找c的在字符数组s中的位置,返回下标
int pos(char c,char s[],int strStart)
{
for(int i=strStart;i<s.length;i++)
{
if(s[i]==c) return i;
}
return -1;
}
//创建一棵树
void createTree(TreeNode root,char[] preOrder,int strStart1,char[] inOrder,int strStart2,int len)
{
int tempLocation;
int rlen;
int llen;
if(len<=0){root=null;return;}
else
{
root=new TreeNode(preOrder[strStart1]);
tempLocation=pos(preOrder[strStart1],inOrder,strStart2);
llen=tempLocation-strStart2;
rlen=len-(llen+1);
createTree(root.lChild,preOrder,strStart1+1,inOrder,strStart2,llen);
createTree(root.rChild,preOrder,strStart1+llen+1,inOrder,tempLocation+1,rlen);
}
}
//遍历这棵树
void inTravelTree(TreeNode root)
{
if(root!=null)
{
inTravelTree(root.lChild);
System.out.println(root.data+"");
inTravelTree(root.rChild);
}
}
}
package binary.tree;public class TreeApp { /**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
char[] preOrder={'A','B','C','D','E','F','G','H','I','J','K','L'};
char[] inOrder={'C','E','D','F','B','A','I','H','G','K','J','L'};
Tree tree;
tree=new Tree();
tree.createTree(tree.root, preOrder,0,inOrder, 0, preOrder.length);
tree.inTravelTree(tree.root);
}
}
解决方案 »
- JTable表头的居中
- 我使用Layout(null)布局时,JButton按钮出发一次就布局一次【附有源代码】
- jtable列宽的问题
- java怎么样从键盘输入数值?
- 美女和Computer,两者不可兼得,你选哪个?
- 帮我解决定给高分
- JAVA 的 应用程序 在 另外的电脑上如何运行的问题~!
- statement exceed!! 数据库操作问题!进者有分!!不够再加!
- 一个简单问题:JAVA如何把字符串变成日期型的值以满足oracle数据的插入。
- 我编绎好成了字节文件(class后缀的),请问我把它放在web server上进行调用,……
- JAVA+MATLAB处理
- 编写一个等边三角形程序的代码
root.lChild = new TreeNode(preOrder[strStart1]);
root.rChild = new TreeNode(inOrder[strStart2]);
代码帮你改了一下。package binary.tree;
public class Tree { // 从strStart位置开始查找c的在字符数组s中的位置,返回下标
int pos(char c, char s[], int strStart) { for (int i = strStart; i < s.length; i++) {
if (s[i] == c)
return i;
}
return -1; } /**
* 创建一棵树
* 此函数的参数及返回值有改动
*/
TreeNode createTree(char[] preOrder, int strStart1,
char[] inOrder, int strStart2, int len) {
// 对象在内部创建
TreeNode root = null; int tempLocation;
int rlen;
int llen;
if (len <= 0) {
return null;
} else {
// 函数中通过变量赋值的方式不会返回到调用方
root = new TreeNode(preOrder[strStart1]);
tempLocation = pos(preOrder[strStart1], inOrder, strStart2);
llen = tempLocation - strStart2;
rlen = len - (llen + 1);
root.lChild = createTree(preOrder, strStart1 + 1, inOrder,
strStart2, llen);
root.rChild = createTree(preOrder, strStart1 + llen + 1, inOrder,
tempLocation + 1, rlen); // 必须通过返回值的方式将新生成的对象交给调用方使用。
return root;
}
} // 遍历这棵树
void inTravelTree(TreeNode root) {
if (root != null) {
System.out.println(root.data + "");
inTravelTree(root.lChild);
inTravelTree(root.rChild); }
}
}package binary.tree;
public class TreeApp {
public static void main(String[] args) {
// TODO Auto-generated method stub char[] preOrder = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L' };
char[] inOrder = { 'C', 'E', 'D', 'F', 'B', 'A', 'I', 'H', 'G', 'K', 'J', 'L' }; // 调用方法有改动
Tree tree = new Tree();
TreeNode root = tree.createTree(preOrder, 0, inOrder, 0, preOrder.length);
tree.inTravelTree(root);
}
}
public static void main(String[] args){
java.util.Date date = new java.util.Date(0);
System.out.println(date);
change(date);
System.out.println(date);
}
public static void change(java.util.Date date) {
// 此处改变了参数(变量)的值
date = new java.util.Date(3600000L);
System.out.println(date);
}
}
public class Test { public static void main(String[] args){
java.util.Date date = new java.util.Date(0); System.out.println(date);
change(date);
System.out.println(date);
} public static void change(java.util.Date date) {
// 此处改变了参数(变量)的值
date = new java.util.Date(3600000L);
System.out.println(date);
}
}
上例的输出结果是:
Thu Jan 01 08:00:00 CST 1970
Thu Jan 01 09:00:00 CST 1970
Thu Jan 01 08:00:00 CST 1970 我们稍微改动一下内容:public class Test {
public static void main(String[] args){
java.util.Date date = new java.util.Date(0L);
System.out.println(date);
change(date);
System.out.println(date);
}
public static void change(java.util.Date date) {
// 此处改变了对象的内容
date.setTime(3600000L);
System.out.println(date);
}
}
public class Test { public static void main(String[] args){
java.util.Date date = new java.util.Date(0L); System.out.println(date);
change(date);
System.out.println(date);
} public static void change(java.util.Date date) {
// 此处改变了对象的内容
date.setTime(3600000L);
System.out.println(date);
}
}
上例的输出结果是:
Thu Jan 01 08:00:00 CST 1970
Thu Jan 01 09:00:00 CST 1970
Thu Jan 01 09:00:00 CST 1970 当函数调用时,JVM会生成第二个引用类型的变量,并将原始引用变量的值(对象的内存地址)复制给第二个引用变量。 注意,值传递的本质是变量值的复制而不是对象内容的复制。
第一个例子中,函数内部改变的是第二个引用变量的值,原始引用变量的值没有改变。第二个例子中,函数内部改变的是引用变量所指对象的内容,由于原始引用变量与第二个引用变量的值相等(指向同一个对象),所以导致了函数调用后对象的内容已经改变的事实。