用JAVA语言实现二叉树的层次遍历的非递归算法及查找算法。

Python017

用JAVA语言实现二叉树的层次遍历的非递归算法及查找算法。,第1张

分块查找

typedef struct

{ int key

int link

}SD

typedef struct

{ int key

float info

}JD

int blocksrch(JD r[],SD nd[],int b,int k,int n)

{ int i=1,j

while((k>nd[i].key)&&(i<=b) i++

if(i>b) { printf("\nNot found")

return(0)

}

j=nd[i].link

while((j<n)&&(k!=r[j].key)&&(r[j].key<=nd[i].key))

j++

if(k!=r[j].key) { j=0printf("\nNot found")}

return(j)

}

哈希查找算法实现

#define M 100

int h(int k)

{ return(k%97)

}

int slbxxcz(int t[],int k)

{ int i,j=0

i=h(k)

while((j<M)&&(t[(i+j)%M]!=k)&&(t[(i+j}%M]!=0))

j++

i=(i+j)%M

if(t[i]==k) return(i)

else return(-1)

}

int slbxxcr(int t[],int k)

{ int i,j=0

i=h(k)

while((j<M)&&(t[(i+j)%M]!=k)&&(t[(i+j}%M]>0))

j++

if(j==M) return(0)

i=(i+j)%M

if(t[i]<=0)

{ t[i]=k return(1)}

if(t[i]==k) return(1)

}

int slbxxsc(int t[],int k)

{ int i,j=0

i=h(k)

while((j<M)&&(t[(i+j)%M]!=k)&&(t[(i+j}%M]!=0))

j++

i=(i+j)%M

if(t[i]==k)

{ t[i]=-1return(1)}

return(0)

}

顺序查找

#define M 500

typedef struct

{ int key

float info

}JD

int seqsrch(JD r[],int n,int k)

{ int i=n

r[0].key=k

while(r[i].key!=k)

i--

return(i)

}

折半查找

int binsrch(JD r[],int n,int k)

{ int low,high,mid,found

low=1 high=nfound=0

while((low<=high)&&(found==0))

{ mid=(low+high)/2

if(k>r[mid].key) low=mid+1

else if(k==r[mid].key) found=1

else high=mid-1

}

if(found==1)

return(mid)

else

return(0)

}

虽然都是C++写的,万变不离其中,JAVA我现在 刚学习,就不献丑了

我自己用递归写了下,不知道能不能给你帮助:

测试类:

package tree

import java.util.*

public class Test {

public static void main(String[] args){

List<Tree>trees=new ArrayList<Tree>()

int id=1

Tree tree1=new Tree(0,id++,"张三丰")

Tree tree2=new Tree(tree1.getId(),id++,"武当宋大侠宋远桥")

Tree tree3=new Tree(tree1.getId(),id++,"武当俞二侠俞莲舟")

Tree tree4=new Tree(tree1.getId(),id++,"武当俞三侠俞岱岩")

Tree tree5=new Tree(tree1.getId(),id++,"武当张四侠张松溪")

Tree tree6=new Tree(tree1.getId(),id++,"武当张五侠张翠山")

Tree tree7=new Tree(tree1.getId(),id++,"武当殷六侠殷梨亭")

Tree tree8=new Tree(tree1.getId(),id++,"武当莫七侠莫声谷")

Tree tree9=new Tree(tree6.getId(),id++,"明教张无忌")

Tree tree13=new Tree(tree2.getId(),id++,"叛徒宋青书")

Tree tree10=new Tree(0,id++,"任我行")

Tree tree11=new Tree(tree10.getId(),id++,"令狐冲")

Tree tree12=new Tree(tree10.getId(),id++,"任盈盈")

trees.add(tree1)

trees.add(tree2)

trees.add(tree3)

trees.add(tree4)

trees.add(tree5)

trees.add(tree6)

trees.add(tree7)

trees.add(tree8)

trees.add(tree9)

trees.add(tree10)

trees.add(tree11)

trees.add(tree12)

trees.add(tree13)

for(int i=0i<trees.size()i++){

Tree tree=trees.get(i)

if(tree.getParentId()==0){

tree.showChildTree(trees)

}

}

}

}

树类:

package tree

import java.util.List

public class Tree {

private int parentId

private int id

private String showStr

private String Spaces=""

public Tree() {

// TODO Auto-generated constructor stub

}

public Tree(int parentId,int id,String showStr){

this.parentId=parentId

this.id=id

this.showStr=showStr

}

public void showChildTree(List<Tree>trees){

if(parentId!=0){

trees.get(id-1).setSpaces(trees.get(parentId-1).getSpaces()+" ")

}

System.out.println(trees.get(id-1).getSpaces()+showStr)

for(int i=0i<trees.size()i++){

Tree tree=trees.get(i)

if(tree.getParentId()==id){

tree.showChildTree(trees)

}

}

}

public int getParentId() {

return parentId

}

public void setParentId(int parentId) {

this.parentId = parentId

}

public int getId() {

return id

}

public void setId(int id) {

this.id = id

}

public String getShowStr() {

return showStr

}

public void setShowStr(String showStr) {

this.showStr = showStr

}

public String getSpaces() {

return Spaces

}

public void setSpaces(String spaces) {

Spaces = spaces

}

}

效果图:

张三丰

武当宋大侠宋远桥

叛徒宋青书

武当俞二侠俞莲舟

武当俞三侠俞岱岩

武当张四侠张松溪

武当张五侠张翠山

明教张无忌

武当殷六侠殷梨亭

武当莫七侠莫声谷

任我行

令狐冲

任盈盈