|
| 1 | +package tree; |
| 2 | + |
| 3 | +import java.util.Scanner; |
| 4 | + |
| 5 | +class CBTType{ //���������������� |
| 6 | + String data; //Ԫ�ؽ������ |
| 7 | + CBTType left; //�������������������� |
| 8 | + CBTType right; //�������������������� |
| 9 | +} |
| 10 | + |
| 11 | + |
| 12 | +public class TreeList { |
| 13 | + static final int MAXLEN=3; |
| 14 | + static Scanner input= new Scanner(System.in); |
| 15 | + |
| 16 | + |
| 17 | + //��ʼ���������������ڴ棬Ȼ������һ����������ݣ�����ָ��������������������������Ϊ�� |
| 18 | + CBTType InitTree(){ //��ʼ���������ĸ� |
| 19 | + CBTType node; |
| 20 | + if((node=new CBTType())!=null){ //�����ڴ� |
| 21 | + System.out.print("��������һ����������ݣ�\n"); |
| 22 | + node.data=input.next(); |
| 23 | + node.left=null; |
| 24 | + node.right=null; |
| 25 | + if(node!=null){ //�������������㲻Ϊ�� |
| 26 | + return node; |
| 27 | + }else{ |
| 28 | + return null; |
| 29 | + } |
| 30 | + } |
| 31 | + return null; |
| 32 | + } |
| 33 | + |
| 34 | + //���ӽ��:���ӽ��ɦ����Ҫ�����������⣬��Ҫָ���丸��㣬�Լ����ӵĽ������Ϊ���������������� |
| 35 | + void AddTreeNode(CBTType treeNode){ //treeNodeΪ�������ĸ���㣬��������ȥ���Ҹö�����. |
| 36 | + //�˷����������ڴ棬Ȼ�����������������ݣ���������������Ϊ�ա�����ָ������� |
| 37 | + CBTType pnode,parent; //pnode��Ϊ������㣬parent��Ϊ����� |
| 38 | + String data; //��Ҫ���ӵĽ������ |
| 39 | + int menusel; |
| 40 | + |
| 41 | + if((pnode=new CBTType())!=null){ //Ϊ�����������ڴ� |
| 42 | + System.out.print("����������������: \n"); |
| 43 | + pnode.data=input.next(); |
| 44 | + pnode.left=null; |
| 45 | + pnode.right=null; |
| 46 | + |
| 47 | + System.out.print("����ý��ĸ�������ݣ�"); //���븸������� |
| 48 | + data=input.next(); |
| 49 | + |
| 50 | + parent=TreeFindNode(treeNode,data); //������������ĸ�������ݣ�����ָ�����ݵĽ�� |
| 51 | + if(parent==null){ //���û�ҵ� |
| 52 | + System.out.print("δ�ҵ��ø���㣡\n"); |
| 53 | + pnode=null; //�ͷŴ����Ľ���ڴ� |
| 54 | + return; |
| 55 | + } |
| 56 | + //ѡ���� |
| 57 | + System.out.printf("1.���Ӹý�㵽������\n 2.���Ӹý�㵽������\n ��1��2���˳�"); |
| 58 | + do{ |
| 59 | + menusel=input.nextInt(); //����ѡ���� |
| 60 | + if(menusel==1||menusel==2){ |
| 61 | + if(parent==null){ //�ո��Dz���ָ�����ݵĽ�㣬û�ҵ������ |
| 62 | + System.out.print("�����ڸ���㣬�������ø����!\n"); |
| 63 | + }else{ |
| 64 | + switch(menusel){ |
| 65 | + case 1: //���ӵ���������� |
| 66 | + if(parent.left!=null){ //���������� |
| 67 | + System.out.print("��������㲻Ϊ�գ�\n"); |
| 68 | + }else{ |
| 69 | + parent.left=pnode; |
| 70 | + } |
| 71 | + break; |
| 72 | + case 2: //���ӵ���������� |
| 73 | + if(parent.right!=null){ //���������� |
| 74 | + System.out.print("��������㲻Ϊ�գ�\n"); |
| 75 | + }else{ |
| 76 | + parent.right=pnode; |
| 77 | + } |
| 78 | + break; |
| 79 | + default: |
| 80 | + System.out.print("��������\n"); |
| 81 | + } |
| 82 | + } |
| 83 | + } |
| 84 | + }while(menusel!=1&&menusel!=2); |
| 85 | + } |
| 86 | + |
| 87 | + } |
| 88 | + //���Ҳ���������������ÿһ����㣬����Ա����ݣ����ҵ�L·�����ݾͷ��ظ��������ڽ������� |
| 89 | + CBTType TreeFindNode(CBTType treeNode,String data){ //���ҽ��.treeNodeΪ�����ҵĶ������ĸ���㣬�������dataΪ�����ҵĽ�����ݡ� |
| 90 | + //���жϸ�����Ƿ�Ϊ�գ�Ȼ�������������ݹ���ҡ������ǰ�������������������ȣ��ص�ǰ��������. |
| 91 | + CBTType ptr; //��һ���ٽ�����ĵõ���ѯ���Ľ�����ݣ�������ѯ�Ա� |
| 92 | + if(treeNode==null){ |
| 93 | + return null; |
| 94 | + } |
| 95 | + else{ |
| 96 | + if(treeNode.data.equals(data)){ |
| 97 | + return treeNode; |
| 98 | + } |
| 99 | + else { //�ֱ������������ݹ���� |
| 100 | + if((ptr=TreeFindNode(treeNode.left,data))!=null){ //�� ��������� |
| 101 | + return ptr; |
| 102 | + }else if((ptr=TreeFindNode(treeNode.right,data))!=null){ //����������� |
| 103 | + return ptr; |
| 104 | + }else{ |
| 105 | + return null; |
| 106 | + } |
| 107 | + } |
| 108 | + } |
| 109 | + } |
| 110 | + |
| 111 | + //��ʾ������ݲ�����������ʾ��ǰ�����������ݡ�pΪ����ʾ��㡣 |
| 112 | + void TreeNodeData(CBTType p){ //��ʾ������� |
| 113 | + System.out.printf("%s",p.data); //���������� |
| 114 | + } |
| 115 | + /** |
| 116 | + * ǰ�������Ҳ���ȸ�������������˳���ǣ������������������� |
| 117 | + * ���������Ҳ���и�������˳���� ������������������ |
| 118 | + * ���������Ҳ�к������������˳�������������������� |
| 119 | + * @param treeNode |
| 120 | + */ |
| 121 | + |
| 122 | + //������������ȷ��y����Ȼ����������������������������ڱ�����������ɦ����Ȼ�ȷ��y���㣬Ȼ������������������������������������Ϊ���ء����ݹ��˼·���������������� |
| 123 | + //�����treeNodeΪ�Ҷ���������� |
| 124 | + void DLRTree(CBTType treeNode){ |
| 125 | + if(treeNode!=null){ |
| 126 | + TreeNodeData(treeNode); //��ʾ�������� |
| 127 | + DLRTree(treeNode.left); //���õݹ�˼�룡�������������������ñ������������˵ݹ���ھ����ڲ��ρ���ɦ��ֱ��һ���������Ϊ�ա� |
| 128 | + DLRTree(treeNode.right); //�ݹ�ǰ�����ǣ�һ��ʼ��������������㲻Ϊ�գ����������Ҳ��Ϊ�ա������Ϊ�գ��ͻ�����������滻������㡣 |
| 129 | + } |
| 130 | + } |
| 131 | + |
| 132 | + //�������:���ȱ�����������Ȼ����y���㣬���������������ڱ�����������ɦ����Ȼ�ȱ������������ۇٴ��y���㣬������������ |
| 133 | + void LDRTree(CBTType treeNode){ |
| 134 | + if(treeNode!=null){ |
| 135 | + LDRTree(treeNode.left); //������������� |
| 136 | + TreeNodeData(treeNode); //��ʾ������� |
| 137 | + LDRTree(treeNode.right); //������������� |
| 138 | + } |
| 139 | + } |
| 140 | + |
| 141 | + //������������ȱ�����������Ȼ������������������y���㣬�ڱ�����������ɦ����Ȼ�ȱ�����������Ȼ�����������������������㡣 |
| 142 | + // treeNodeΪ��Ҫ�����Ķ���������� |
| 143 | + void LRDTree(CBTType treeNode){ |
| 144 | + if(treeNode!=null){ |
| 145 | + LRDTree(treeNode.left); //������������� |
| 146 | + LRDTree(treeNode.right); //������������� |
| 147 | + TreeNodeData(treeNode); //��ʾ������� |
| 148 | + } |
| 149 | + } |
| 150 | + |
| 151 | + //�����������������ֱ�۶��ȱ����㷨����������һ�㼴����㣬�ٴ�����һ�����������������㣨��ε�ڶ��㣩 |
| 152 | + //treeNodeΪ��Ҫ�����Ķ���������㡣����ɦ���ȴӸ���㿪ʼ����ÿ��Ľ��Ž����С� |
| 153 | + void LevelTree(CBTType treeNode){ |
| 154 | + CBTType p; |
| 155 | + CBTType[] q=new CBTType[MAXLEN]; //�����һ��˳����У�ѭ�����У� |
| 156 | + int head=0,tail=0; //��ͷ��β��tailָ�������һ���ɴ����λ�á� |
| 157 | + |
| 158 | + if(treeNode!=null){ //������������� |
| 159 | + |
| 160 | + q[tail]=treeNode; //�������������ý����С���˼�ǣ���Ϊ�����ڣ��������Ž�һ������ |
| 161 | + tail=(tail+1)%MAXLEN; //���Dz��κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ�� |
| 162 | + } |
| 163 | + while(head!=tail){ |
| 164 | + p=q[head]; //��ȡ����Ԫ�� |
| 165 | + TreeNodeData(p); //��������Ԫ�� |
| 166 | + head=(head+1)%MAXLEN; //���ӵ�ɦ��ͷָ��ͼ�1�����κ�ָ�������ƶ�һ��λ�ã�������ת������ͷ�� |
| 167 | + |
| 168 | + if(p.left!=null){ |
| 169 | + q[tail]=p.left; //����ý��������������������Ͱ����Ž����С�������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档 |
| 170 | + tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���2 |
| 171 | + |
| 172 | + } |
| 173 | + if(p.right!=null){ //����ý������������������ |
| 174 | + q[tail]=p.right; //������������������С���ɦ��һ��ѭ���ǣ������������ڣ�ȡ��õ���ţ����ԷŽ������б��档 |
| 175 | + tail=(tail+1)%MAXLEN; //������������������к�tail�������ƶ�����һ��ѭ��ɦ��˼���ǣ�ͷ���������������ڣ���tail+1��%MAXLENΪ2�����ڣ����Ե�һ�����������Ϊ���3 |
| 176 | + } |
| 177 | + } |
| 178 | + } |
| 179 | + |
| 180 | + //��ѯ����������� |
| 181 | + int TreeDepth(CBTType treeNode){ |
| 182 | + int depleft,depright; |
| 183 | + if(treeNode==null){ |
| 184 | + return 0; //���ڿ��������Ϊ0 |
| 185 | + }else{ |
| 186 | + //����ʹ�õݹ飬�ǵݹ鵽���һ��ġ�Ȼ�������һ��������� ́��룬�ж�����Ⱥ�����ȡ����ŷ��ص������ڶ��㣬�اٴ�����������....���һ�㣨����㣩 |
| 187 | + //�������μݹ���̣��ȵݹ���������ȣ������һ�㣬Ȼ��ݹ�õ���������ȣ���������������ž��DZ�������������������������ɦ��Ƚϸ߶�if(depleft>depright)�� |
| 188 | + //Ȼ������������Ĵӵײ�����ص�����㣬����return��һ����� |
| 189 | + depleft=TreeDepth(treeNode.left); //��������ȣ��ݹ���ã� |
| 190 | + depright=TreeDepth(treeNode.right); //��������ȣ��ݹ���ã� |
| 191 | + //���߱������õ�������������������ȣ�Ȼ��ͱȽϸ߶� |
| 192 | + if(depleft>depright){ |
| 193 | + return depleft+1; |
| 194 | + }else{ |
| 195 | + return depright+1; |
| 196 | + } |
| 197 | + |
| 198 | + |
| 199 | +// if(depleft<depright){ |
| 200 | +// return depright+1; |
| 201 | +// }else{ |
| 202 | +// return depleft+1; |
| 203 | +// } |
| 204 | + } |
| 205 | + } |
| 206 | + //��ն�����������������ɿ������� |
| 207 | + //treeNode�Ǵ���յĶ������ĸ���㡣�������յݹ��������������������������ʹ�ø�ֵnull�������ͷŵ�ǰ�����ռ�ڴ档 |
| 208 | + void ClearTree(CBTType treeNode){ |
| 209 | + if(treeNode!=null){ |
| 210 | + ClearTree(treeNode.left); //�ݹ������������������ |
| 211 | + ClearTree(treeNode.right); //�ݹ������������������ |
| 212 | + treeNode=null; //�ͷŵ�ǰ�����ռ�ڴ� |
| 213 | + } |
| 214 | + } |
| 215 | + |
| 216 | + |
| 217 | + public static void main(String[] args) { |
| 218 | + // TODO Auto-generated method stub |
| 219 | + CBTType root=null; //rootΪָ����������������� |
| 220 | + int menusel; |
| 221 | + TreeList t=new TreeList(); |
| 222 | + root=t.InitTree(); //��ʼ�� |
| 223 | + do{ //���ӽ�� |
| 224 | + System.out.print("��ѡ��˵����Ӷ������Ľ��\n"); |
| 225 | + System.out.print("0.�˳�\t"); //��ʾ�˵� |
| 226 | + System.out.print("1.���Ӷ��������\n"); |
| 227 | + menusel=input.nextInt(); |
| 228 | + switch(menusel){ |
| 229 | + case 1: |
| 230 | + t.AddTreeNode(root); //���ӽ�� |
| 231 | + break; |
| 232 | + case 0: |
| 233 | + break; |
| 234 | + default: |
| 235 | + ; |
| 236 | + } |
| 237 | + }while(menusel!=0); |
| 238 | + |
| 239 | + //���� |
| 240 | + do{ |
| 241 | + System.out.print("��ѡ��˵�����������������0��ʾ�˳���\n"); |
| 242 | + System.out.print("1.�������DLR\t"); |
| 243 | + System.out.print("2.�������LDR\t"); |
| 244 | + System.out.print("3.�������LRD\t"); |
| 245 | + System.out.print("4.�������\n"); |
| 246 | + menusel=input.nextInt(); |
| 247 | + switch(menusel){ |
| 248 | + case 0: |
| 249 | + break; |
| 250 | + case 1: //������� |
| 251 | + System.out.print("\n�������DLR�Ľ����"); |
| 252 | + t.DLRTree(root); |
| 253 | + System.out.print("\n"); |
| 254 | + break; |
| 255 | + case 2: //������� |
| 256 | + System.out.print("\n����LDR�����Ľ����"); |
| 257 | + t.LDRTree(root); |
| 258 | + System.out.print("\n"); |
| 259 | + break; |
| 260 | + case 3: |
| 261 | + System.out.print("\n�������LRD�Ľ����"); |
| 262 | + t.LRDTree(root); |
| 263 | + System.out.print("\n"); |
| 264 | + break; |
| 265 | + case 4: |
| 266 | + System.out.print("\n��������Ľ���ǣ�"); |
| 267 | + t.LevelTree(root); |
| 268 | + System.out.print("\n"); |
| 269 | + break; |
| 270 | + default: |
| 271 | + ; |
| 272 | + } |
| 273 | + }while(menusel!=0); |
| 274 | + //������ |
| 275 | + System.out.printf("\n �����������%d\n",t.TreeDepth(root)); |
| 276 | + |
| 277 | + t.ClearTree(root); |
| 278 | + root=null; |
| 279 | + } |
| 280 | +} |
0 commit comments