日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java界面化二叉排序树_层次序创建二叉树(图形界面和控制台输入实现)

發布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java界面化二叉排序树_层次序创建二叉树(图形界面和控制台输入实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 2018.11.7

2 XT3

4 /**

5 * 功能:構造二叉樹6 * 說明:7 * 1.主函數輸入模式有兩種,BT參數 true 圖形界面,false 控制臺輸入8 * 2.構造樹是按層次遍歷結果輸入的 如:ABCDE*F**GH9 */

10

11 import javax.swing.*;12 import java.awt.*;13 importjava.awt.event.ActionEvent;14 importjava.awt.event.ActionListener;15 importjava.io.BufferedReader;16 importjava.io.IOException;17 importjava.io.InputStreamReader;18

19 public class BT extends JFrame implementsActionListener {20 private BufferedReader br=null;21 privateMyPanel myPanel;22 privateJTextField jtf;23 privateJButton jb1, jb2;24 privateJLabel jl;25

26 public BT(booleanisGUIMode) {27 if(isGUIMode) {28 this.setLayout(null); //自定義布局

29 jtf = new JTextField("");30 jtf.setFont(new Font("宋體", Font.BOLD, 16));//Arial

31 jtf.setColumns(40);32 jb1 = new JButton("確定");33 jb2 = new JButton("重置");34 jb1.setFont(new Font("宋體",Font.PLAIN,16));35 jb2.setFont(new Font("宋體",Font.PLAIN,16));//設置按鈕的字體

36 jl = new JLabel("輸入");37 jl.setFont(new Font("華文行楷",Font.PLAIN,20));//設置標簽的字體樣式

38

39 jl.setBounds(35, 20, 50, 50); //如果設置了絕對布局,那么要通過setBounds()來設置絕對位置與絕對大小

40 jtf.setBounds(80, 30, 350, 30);41 jb1.setBounds(120, 100, 100, 25);42 jb2.setBounds(270, 100, 100, 25);43 this.add(jl);44 this.add(jtf);45 this.add(jb1);46 this.add(jb2);47

48 myPanel = newMyPanel();49 Thread t = newThread(myPanel);50 t.start();//啟動線程

51 myPanel.setBounds(0, 150, 3000, 200);//如果沒擋住了的話是不會調用paint方法的

52 this.add(myPanel);53 this.setTitle("BuildTree");54 this.setVisible(true);55 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);56 this.setSize(500, 380);57 this.setLocation(500, 200);58

59 jb1.addActionListener(this);//注冊監聽

60 jb2.addActionListener(this);61

62 } else{63 consoleInput();64 }65 }66

67 private voidconsoleInput() {68 br = new BufferedReader(newInputStreamReader(System.in));69 System.out.print("Input:");70 try{71 String input =br.readLine();72 while (!input.equals("q")) {73 char[] nodes =input.toCharArray();74 TreeNode treeNode = create(nodes, 0);75 System.out.println("前序:" +displayPreOrder(treeNode));76 System.out.println("中序:" +displayInOrder(treeNode));77 System.out.println("后序:" +displayPostOrder(treeNode));78 System.out.print("Input:");79 input =br.readLine();80 }81 } catch(IOException e) {82 try{83 br.close();84 } catch(IOException e1) {85 e1.printStackTrace();86 }87 e.printStackTrace();88 }89 }90

91 private TreeNode create(char[] arr, intindex) {92 if (index >= arr.length) //可以不需要,但是所有的值必須要寫滿,任一個#都要寫,不然會越界

93 return null;94 else if (String.valueOf(arr[index]).equals("#")||String.valueOf(arr[index]).equals("*")) {95 return null;96 } else{97 TreeNode node = newTreeNode(arr[index]);98 node.leftChild = create(arr, 2 * index + 1);99 node.rightChild = create(arr, 2 * index + 2);100 returnnode;101 }102 }103

104 private staticString displayInOrder(TreeNode treeNode) {105 //中序

106 if (treeNode != null) {107 return displayInOrder(treeNode.leftChild) + (treeNode.data == '*' ? "" : treeNode.data) +

108 displayInOrder(treeNode.rightChild);109 }110 return "";111 }112

113 private staticString displayPreOrder(TreeNode treeNode) {114 //前序

115 if (treeNode != null) {116 return (treeNode.data == '*' ? "" : treeNode.data) + displayPreOrder(treeNode.leftChild) +displayPreOrder(treeNode.rightChild);117 }118 return "";119 }120

121 private staticString displayPostOrder(TreeNode treeNode) {122 //中序

123 if (treeNode != null) {124 return displayPostOrder(treeNode.leftChild) + displayPostOrder(treeNode.rightChild) + (treeNode.data == '*' ? "": treeNode.data);125 }126 return "";127 }128

129 @Override130 public voidactionPerformed(ActionEvent e) {131 if (e.getSource() ==jb1) {132 String s =jtf.getText();133 if (s.matches("[A-Za-z]([A-Za-z]|\\*|#)*")) { //注意:是w就可以了,不要用/w,就代表字母下劃線

134 myPanel.display(s.toCharArray());135 } else{136 JOptionPane.showMessageDialog(null, "輸入錯誤!\n請重試!","ERROR",JOptionPane.ERROR_MESSAGE);137 jtf.setText("");138 }139 }140 else if (e.getSource() ==jb2) {141 jtf.setText("");142 }143 }144

145 public static voidmain(String[] args) {146 new BT(true);147 }148

149 class MyPanel extends JPanel implementsRunnable {150 String[] strings;151

152 MyPanel() {153 strings = new String[]{"", "", ""};154 //this.setSize(100, 1000);//看來絕對布局里的setBounds()方法設置的大小具有更高優先級,可以覆蓋這條設置

155 this.setBackground(new Color(125, 134, 234));156 }157

158 public void display(char[] chars) {159 TreeNode treeNode = create(chars, 0);160 strings[0] =displayPreOrder(treeNode);161 strings[1] =displayInOrder(treeNode);162 strings[2] =displayPostOrder(treeNode);163 }164

165 @Override166 public voidpaint(Graphics g) {167 super.paint(g);//168 g.setFont(new Font("宋體", Font.BOLD, 24));169 g.drawString("前序: " + strings[0], 10, 50);170 g.drawString("中序: " + strings[1], 10, 100);171 g.drawString("后序: " + strings[2], 10, 150);172 }173

174 @Override175 public voidrun() {176 while (true) {177 try{178 Thread.sleep(500);179 repaint();180 } catch(InterruptedException e) {181 e.printStackTrace();182 }183 }184 }185 }186

187 classTreeNode {188 Character data;189 TreeNode leftChild;190 TreeNode rightChild;191 //含數據,二叉鏈表

192 TreeNode(chardata) {193 this.data =data;194 leftChild = null;195 rightChild = null;196 }197 }198 }

總結

以上是生活随笔為你收集整理的java界面化二叉排序树_层次序创建二叉树(图形界面和控制台输入实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。