Membuat GUI dengan Java Swing Part 8 (JRadioButton)



JRadioButton merupakan bulatan kecil untuk memberikan opsi.JRadioButton harus diletakkan dalam ButtonGroup supaya kita hanya bisa memilih satu opsi saja.Kalau tidak dikasih ButtonGroup,maka kita bisa memilih banyak pilihan sama seperti JCheckBox


Konstruktor Untuk JRadioButton


Konstruktor Deskripsi
JRadioButton() membuat jradiobutton tanpa teks dan awalnya tidak dipilih
JRadioButton(String s) jradiobutton yang awalnya tidak dipilih dan dengan teks tertentu
JCheckBox(String s,boolean dipilih) jradiobutton dengan teks dan awalnya dipilih

Contoh Kode Membuat JRadioButton

package mainclass;
import javax.swing.*;
class Contoh{
public static void main (String[]args) {
 JFrame frame = new JFrame("Contoh RadioButton");
JRadioButton rb1 = new JRadioButton("Laki-Laki",true);
JRadioButton rb2 = new JRadioButton("Perempuan");
ButtonGroup bg = new ButtonGroup();
rb1.setBounds(50,50,100,40);
rb2.setBounds(50,100,100,40);
frame.setSize(300,350);
frame.setVisible(true);
frame.setLayout(null);
bg.add(rb1);//menambahkan laki2 ke buttongroup
bg.add(rb2);//menambahkan perempuan ke buttongroup
frame.add(rb1);
frame.add(rb2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
}
}
Hasil output kode di atas :
program dengan jradiobutton java

Implementasi JRadioButton dengan ActionListener

Masih melanjutkan program di atas,sekarang kita akan membuat aplikasi mengeluarkan pesan jika JRadioButton dipilih 
package mainclass;
import javax.swing.*;
import java.awt.event.*;
class Contoh extends JFrame implements ActionListener{
    JRadioButton rb1,rb2;
    JFrame frame;
    ButtonGroup bg;
    Contoh(){
    frame = new JFrame("Contoh RadioButton");
 rb1 = new JRadioButton("Laki-Laki");
rb2 = new JRadioButton("Perempuan");
bg = new ButtonGroup();
rb1.setBounds(50,50,100,40);
rb2.setBounds(50,100,100,40);
rb1.addActionListener(this);
rb2.addActionListener(this);
frame.setSize(300,350);
frame.setVisible(true);
frame.setLayout(null);
bg.add(rb1);
bg.add(rb2);
frame.add(rb1);
frame.add(rb2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent e){
    if (rb1.isSelected()){
        JOptionPane.showMessageDialog(this, "Kamu Laki-Laki");//menampilkan pesan
    }
    if (rb2.isSelected()){
        JOptionPane.showMessageDialog(this, "Kamu Perempuan");//menampilkan pesan
    }
}
public static void main (String[]args) {
 new Contoh();
  
}
}
Hasil output kode di atas :

tes program jradiobutton dengan actionlistener







Hal-hal inilah yang bikin kalah saat ranked di Mobile Legends


Ranked merupakan mode paling prestisius di mobile legends.Di sini 5 player vs 5 player saling beradu skill dan strategi guna memperoleh kemenangan dengan menghancurkan crystal lawan.Kemenangan inilah yang akan memberikan bintang/poin (kalau mythic) sehingga pemain bisa naik rank.Sebaliknya,tim yang kalah setiap pemainnya akan dikurangi bintang/poin nya 

Kekalahan tentu adalah hal yang ingin dihindari oleh setiap player mobile legends terutama dalam bermain ranked.Kali ini kita akan membahas hal-hal apa saja sih yang bisa menyebabkan kekalahan dalam bermain rank mobile legends

Langsung saja ya daripada banyak basa-basi 

1) Tim Egois

Faktor paling berpengaruh penyebab kekalahan dalam tim saat ranked adalah tim yang egois.Rekan setim kita ingin nya ngepick hero favorit mereka tanpa memerhatikan keseimbangan formasi tim.Menurut saya sih hal ini sangat wajar ditemui terutama saat solo rank

Komposisi tim yang seimbang menurut saya sebagai berikut :
  • 1 mm (hardcore), 1 mage(support), 2 tank(single target dan aoe), 1 fighter (offlaner) untuk hyper carry
  • 1 mm (hardcore), 1 mage/assassin(midlaner), 2 tank/1tank dan 1 support, 1fighter (offlaner) untuk main meta normal (pake midlaner)
Mungkin banyak lagi variasi komposisi tim yang seimbang tapi menurut saya kebanyakan metanya gitu
.Sebaiknya jangan menganggap remeh draft pick karena keberhasilan draft pick menentukan 50% kemenangan untuk tim kita

2) Ngeban Ngasal

Salah satu fase dalam draft pick adalah ngeban hero.Menurut saya ada 3 cara untuk ngeban hero yaitu :

  • Ban hero karena takut dicounter 
  • Ban hero ikut-ikutan aja tidak tau alasannya
  • Ban hero karena takut dengan kekuatan hero tersebut
Player epic tidak mikir panjang kalo soal ngeban biasanya mereka bannya cuma di kisaran Helcurt,Natalia,Claude,dll. 

Kalo player Mythic sih mungkin agak mikir soal ngebannya.Misalnya,kalo tim mau pick lance bannya bisa Khufra karena Khufra bisa cancel dash skill 1 lance.Mau main hyper cary mm biasanya ban nya ke arah Natalia/Helcurt karena mereka spesialis nyulik mm dll.

First pick juga diperhitungkan kalo di Mythic.Supaya bisa dapat ini harus ban ini bla bla bla

Intinya jangan lagi ngeban hero ngasal karena itu bisa berpengaruh terhadap draft dari hero tim kita dan tim lawan.Biasanya sih yang menang draft bakal punya kesempatan menang lebih besar

3) Ngelag

Ngelag juga faktor yang kerap kali menganggu kenyamanan dalam bermain.Ngelag memang tidak bisa kita hindari apapun isp yang kita pake.Bisa aja kan sebelum main ranked itu lancar gak ngelag pas udah main ranked tiba2 ngelag gak bisa gerak bla bla semua itu kita gak bisa hindari

Untuk mengurangi masalah lag bisa dengan cara berikut :

  • Perhatikan suhu device kalian kalau panas jangan maksain untuk main dulu.Kita bisa diemin dulu device kita supaya agak dingin baru kita gas untuk main
  • Tes koneksi kalian dulu di mode lain kayak ai,brawl,dll
  • Kalau bisa jangan pake paket data karena paket data cenderung lebih tidak stabil jika dibandingkan dengan wifi.Yang butuhkan untuk main game online di sini bukan kecepatannya melainkan stabil gak nya internet yang kita pakai
  • Hindari main saat jam2 ngelag biasanya malam kalo mobile legend.Server ml ini memang agak ngelag kalo malem2
4) Tim yang Gak Bisa Main/Gak Bisa Kerja Sama

Sering kali kita temui sih kalo solo rank player2 yang gak bisa maen,tidak mengerti tugasnya,maennya ngasal.Sebagai contoh ada mid yang gak mau rotasi,mm yang gak farming atau tim kita yang terus memaksa war padahal lagi kondisi kalah

Saya akui solo rank itu hoki2an.Kalau lagi hoki dapat tim bagus terus,kita bisa ws.Kalo lagi gak hoki,kita bisa ls.Sejago-jagonya kita tetap butuh yang namanya tim karena ini moba permainan tim

Untuk meminimalisir tim yang gak bisa main ini kita bisa mabar minimal berdua lah sama temen yang kita percaya.Lebih bagus lagi kalo temennya ada di deket kita jadi kita bisa komunikasi sama dia

Chemistry sangat penting di sini.Kalau chemistry sudah ada,maka enak untuk kedepannya tidak ada lagi rasa egois di antara kita

5) Toxic

Faktor yang kerap kali diremehkan yaitu toxic.Toxic sih menurut saya sih wajar2 aja.Sebagai manusia sih kita gak luput dari namanya marah.

Namun,kemarahannya jangan di bawa ke in-game dengan ketikkan yang membuat "down" mental rekan satu tim.Apalagi kalau toxic sampe bawa2 agama, orang tua,dll.Itu sih sudah parah banget

Yang tadinya mainnya gak bener ditambah lagi baper karena membaca chat toxic,dia tambah gak bener lagi mainnya malah bisa2 afk karena baper

Setiap manusia punya karakter yang berbeda kita gak bisa memanfaatkan pendapat kita seperti "ini cuman game,kalah kok baper" atau "gitu aja ngambek".Beberapa kepribadian memang cenderung baper khusunya orang2 yang emosional

Kalo kita ingin fokus maen dan tidak ingin mendengar bacotan gak penting dari tim atau lawan,kita bisa pakai fitur mute jadi chat mereka gak bakal masuk ke kita

Intinya sebego2 nya orang maen,kita gak boleh toxic-in dia dengan chat karena kembali lagi karakter orang beda2 dan gak bisa kita paksakan pendapat kita

6) Blunder

Blunder yaitu kesalahan yang bikin tim lawan melakukan comeback.Blunder ini sih seringkali dilakukan oleh player-player seperti kita bahkan pro player pun juga kerap melakukan blunder

Blunder yang kerap dilakukan :
  • Mentang2 carry sudah kaya,maju seenaknya tanpa melihat tim
  • Tank yang inisiasi tanpa ada follow-up
  • Ngedive turret buat ngekill musuh tapi gak dapet malah mati
  • Tidak open map saat turtle/lord alhasil kecolong
  • Mm terlalu maju sehingga keculik
  • Ngepush tanpa liat mini map
  • Tidak memerhatikan turret alhasil kalah karena di rat
Untuk mengurangi blunder ini kita bisa sering2 main untuk meningkatkan skilll kita

Mungkin itu aja dulu poinnya kalau ada tambahan akan saya tambahin lagi poinnya

 





Membuat GUI dengan Java Swing Part 7 (JCheckBox)



JCheckBox merupakan kotak kecil yang bisa kita centang.Beberapa checkbox bisa kita centang secara bersamaan tidak seperti RadioButton yang hanya satu saja yang bisa dipilih.Untuk JRadioButton akan kita bahas di part selanjutnya



Konstruktor Untuk JCheckBox


Konstruktor Deskripsi
JCheckBox() membuat jcheckbox tanpa teks dan awalnya tidak dipilih
JCheckBox(String s) jcheckbox dengan teks dan awalnya tidak dipilih
JCheckBox(String teks,boolean dipilih) jcheckbox dengan teks dan awalnya dipilih

Contoh Kode Membuat JCheckBox

package mainclass;
import javax.swing.*;

class Contoh {
public static void main (String[]args) {
JFrame frame = new JFrame("Contoh CheckBox");
JCheckBox cb1 = new JCheckBox("Merah");
JCheckBox cb2 = new JCheckBox("Biru",true);//memulai dengan biru dicentang
cb1.setBounds(50, 50, 70, 30);
cb2.setBounds(50, 100, 70, 30);
frame.setSize(300,300);
frame.setVisible(true);
frame.setLayout(null);
frame.add(cb1);
frame.add(cb2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
}
}
Hasil output aplikasi dari kode di atas :

membuat jcheckbox java swing

Implementasi JCheckBox dengan ItemListener

Melanjutkan kode di atas, kita akan menambahkan satu label lagi untuk menunjukkan checkbox mana yang baru saja kita check/uncheck

package mainclass;
import javax.swing.*;
import java.awt.event.*;
class Contoh {
public static void main (String[]args) {
JFrame frame = new JFrame("Contoh CheckBox");
JCheckBox cb1 = new JCheckBox("Merah");
JCheckBox cb2 = new JCheckBox("Biru");
JLabel l1 = new JLabel("Teks");
cb1.setBounds(50, 50, 70, 30);
cb2.setBounds(50, 100, 70, 30);
l1.setBounds(50,150,150,30);
cb1.addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent e){
        l1.setText("Merah"+" "+ (e.getStateChange()==1 ?"dicentang":"tidak dicentang"));
    }//apakah merah dicentang atau tidak
});
cb2.addItemListener(new ItemListener(){
    public void itemStateChanged(ItemEvent e){
        l1.setText("Biru"+" "+(e.getStateChange()==1 ?"dicentang":"tidak dicentang"));
    }//apakah biru dicentang atau tidak
});
frame.setSize(300,300);
frame.setVisible(true);
frame.setLayout(null);
frame.add(cb1);
frame.add(cb2);
frame.add(l1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
}
}
Hasil output kode di atas 

tes aplikasi dengan checkbox java

tes aplikasi dengan checkbox 1

Yang selanjutnya adalah kita akan mencoba program total harga menggunakan JCheckBox.Nanti kita akan menggunakan perantara 1 Button untuk eksekusi dan 1 label untuk menampilkan total harga


package mainclass;
import javax.swing.*;
import java.awt.event.*;
class Contoh {
public static void main (String[]args) {
JFrame frame = new JFrame("Contoh CheckBox");
JCheckBox cb1 = new JCheckBox("Buku@20k");
JCheckBox cb2 = new JCheckBox("Pensil@3k");
JCheckBox cb3 = new JCheckBox("Penghapus@1k");
JLabel l1 = new JLabel("Teks");
JButton b1 = new JButton("Hitung");
cb1.setBounds(50, 50, 150, 30);
cb2.setBounds(50, 100, 150, 30);
cb3.setBounds(50, 150, 150, 30);
l1.setBounds(50,200,150,30);
b1.setBounds(70, 250, 70, 40);
b1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        int jumlah = 0;
        if(cb1.isSelected()){//buku dipilih atau tidak
            jumlah += 20;
        }
        if(cb2.isSelected()){//pensil dipilih atau tidak
            jumlah += 3;
        }
        if(cb3.isSelected()){//penghapus dipilih atau tidak
            jumlah += 1;
        }
        l1.setText("Total harga "+Integer.toString(jumlah)+"k");
    }
});
frame.setSize(300,350);
frame.setVisible(true);
frame.setLayout(null);
frame.add(cb1);
frame.add(cb2);
frame.add(cb3);
frame.add(l1);
frame.add(b1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
}
}
Aplikasi dari kode di atas

aplikasi total harga dengan checkbox java

tes aplikasi total harga dengan checkbox java

Mungkin itu saja tentang JCheckBox sekian dari saya dan semoga bermanfaat...

Membuat GUI dengan Java Swing Part 6 (JPasswordField)



JPasswordField hampir sama dengan JTextField hanya saja JPasswordField ini dikhususkan untuk menyembunyikan teks yang diketikkan (membuat password).



Konstruktor Untuk JPasswordField :


Konstruktor Deskripsi
JPasswordField() membuat jpasswordfield tanpa teks awal
JPasswordField(int kolom) jpasswordfield dengan jumlah kolom tertentu
JPasswordField(String teks) jpasswordfield dengan teks awal yang ditentukan
JTextArea(String teks, int kolom) jpasswordfield dengan teks dan jumlah kolom yang ditentukan

Contoh Kode Untuk Membuat JPasswordField

package mainclass;
import javax.swing.*;
class Contoh {
public static void main (String[]args) {
JFrame frame = new JFrame("Contoh Password Field");
JPasswordField pf = new JPasswordField("Passwordku");
JLabel l1 = new JLabel("Password");
frame.setSize(300,300);
frame.setVisible(true);
pf.setBounds(90, 30, 90,40 );
l1.setBounds(10, 30, 70,40 );
frame.add(pf); 
frame.add(l1);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Hasil output dari kode di atas :

contoh jpasswordfield

Implementasi JPasswordField dengan ActionListener

Kita akan membuat program untuk menampilkan password pada JPasswordField

Melanjutkan kode yang tadi kali ini kita akan menambahkan 1 button dan 1 label lagi . Button ini bisa kita jadikan perantara untuk menampilkan passwordnya di label kedua

Untuk lebih jelasnya kita ke kodingnya saja

package mainclass;
import javax.swing.*;
import java.awt.event.*;
class Contoh {
public static void main (String[]args) {
JFrame frame = new JFrame("Contoh Password Field");
JPasswordField pf = new JPasswordField("Passwordku");
JLabel l1 = new JLabel("Password");
JLabel l2 = new JLabel("Teks");
JButton b = new JButton("Show");
frame.setSize(300,300);
frame.setVisible(true);
pf.setBounds(90, 30, 90,40 );
l1.setBounds(10, 30, 70,40 );
l2.setBounds(10,150,90,40);
b.setBounds(50,100,70,40);
b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        String data = new String(pf.getPassword());//mendapatkan password dari jpasswordfield
        l2.setText(data);//menampilkan teks ke label kedua
    }
});
frame.add(pf); 
frame.add(l1);
frame.add(b);
frame.add(l2);
frame.setLayout(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
}
}
Hasil output kode di atas :

actionlistener pada jpasswordfield

mengetes program tampilkan password

Kita tekan button "Show" nya dan otomatis passwordnya akan tampil di label kedua yang kita buat

Mungkin itu saja postingan tentang JPasswordField semoga bermanfaat amiin...

Apa itu Struktur Data Binary Tree ?


Tree artinya pohon.Mengacu pada pohon pada dunia nyata yang di mana memiliki akar daun dan ranting

Istilah-istilah yang penting pada Tree :

  • Node paling atas (tidak punya predecessor) disebut Root
  • Node yang berada di atas node tertentu = Predecessor
  • Node yang berada di bawah node tertentu = Successor
  • Predecessor satu level = Parent
  • Sucessor satu level = Child
  • Seluruh Node sebelum node tertentu dan berada pada jalur yang sama = Ancestor
  • Seluruh Node setelah node tertentu dan berada pada jalur yang sama = Descendants
  • Node-node yang memiliki parent yang sama = Sibling
  • Bagian dari tree beserta descendants nya = Subtree
  • Node yang tidak punya successor = Leaf
  • Jumlah node dalam suatu tree = Size
  • Jumlah tingkatan tree = Height
  • Banyaknya child yang dimiliki suatu node = Degree
Contoh paling simple penerapan tree adalah direktori dalam komputer di dalam direktori ada folder kemudian di dalam ada subfolder dst.

Sebenarnya ini sudah dikenalkan saat sd dulu pada pelajaran matematika di mana untuk membuat faktorisasi prima dari suatu bilangan kita bisa memakai pohon faktor.Seperti ini contoh pohon faktor

contoh pohon faktor


Dalam pohon faktor di atas,

  • 120 adalah Root
  • 2,3,5 adalah Leaf karena mereka tidak bercabang
  • 60 dan 2,30 dan 2, 15 dan 2,3 dan 5  descendants dari 120
  • 30 dan 2,15 dan 2,3 dan 5 descendants dari 60
  • 15 dan 2,3 dan 5 descendants dari 30
  • 3 dan 5 descendats dari 15
Kali ini kita akan membahas jenis tree yang lebih spesifik yaitu Binary Tree.Binary Tree merupakan tree di mana setiap node hanya boleh memiliki maksimal 2 child

Contoh Binary Tree :

contoh binary tree

Implementasi Binary Tree Pada Python :

Kita memakai Python saja yang paling mudah implementasinya

Kodenya sebagai berikut

class Node:
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()
            
root = Node(2)#root
root.left = Node(3) #child kiri dari root
root.right = Node(5) #child kanan dari root
root.left.left = Node(7) #child kiri dari 3
root.left.right = Node(9) #child kanan dari 3
root.right.left = Node(11) #child kiri dari 5
root.right.right = Node(13) #child kanan dari 5
root.PrintTree()

Hasil output kode di atas :

tes implementasi tree python
Traversal Pada Binary Tree

Traversal merupakan proses mengunjungi seluruh node pada sebuah tree.Semua node saling terhubung dan dimulai dari root.Karena itulah,kita tidak bisa sembarangan mengakses suatu node.Ada 3 cara untuk traversal yaitu :

1) In-Order Traversal

Urutan kunjungan --> subtreee kiri - root - subtree kanan

Contoh program Python untuk in order traversal

class Node:
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()
    def inorderTraversal(self, root):
        res = []
        if root:
            res = self.inorderTraversal(root.left)
            res.append(root.data)
            res = res + self.inorderTraversal(root.right)
        return res
            
root = Node(2)#root
root.left = Node(3) #child kiri dari root
root.right = Node(5) #child kanan dari root
root.left.left = Node(7) #child kiri dari 3
root.left.right = Node(9) #child kanan dari 3
root.right.left = Node(11) #child kiri dari 5
root.right.right = Node(13) #child kanan dari 5
print(root.inorderTraversal(root))

Hasil output :

tes in-order traversal

2) Pre-Order Traversal

Urutan kunjungan --> root - subtree kiri - subtree kanan

class Node:
def __init__(self,data):
self.left = None
self.right = None
self.data = data
def PrintTree(self):
if self.left:
self.left.PrintTree()
print( self.data),
if self.right:
self.right.PrintTree()
def PreorderTraversal(self, root):
res = []
if root:
res.append(root.data)
res = res + self.PreorderTraversal(root.left)
res = res + self.PreorderTraversal(root.right)
return res
root = Node(2)#root
root.left = Node(3) #child kiri dari root
root.right = Node(5) #child kanan dari root
root.left.left = Node(7) #child kiri dari 3
root.left.right = Node(9) #child kanan dari 3
root.right.left = Node(11) #child kiri dari 5
root.right.right = Node(13) #child kanan dari 5
print(root.PreorderTraversal(root))
Hasil output :

tes pre-order traversal
3) Post-Order Traversal

Urutan kunjungan --> subtree kiri - subtree kanan - root

class Node:
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()
    def PostorderTraversal(self, root):
        res = []
        if root:
            res = self.PostorderTraversal(root.left)
            res = res + self.PostorderTraversal(root.right)
            res.append(root.data)
        return res
            
root = Node(2)#root
root.left = Node(3) #child kiri dari root
root.right = Node(5) #child kanan dari root
root.left.left = Node(7) #child kiri dari 3
root.left.right = Node(9) #child kanan dari 3
root.right.left = Node(11) #child kiri dari 5
root.right.right = Node(13) #child kanan dari 5
print(root.PostorderTraversal(root))

Hasil output :

tes post order traversal

Memasukkan Node ke Dalam Binary Tree

Misal saya punya binary tree seperti ini

binary tree sebelum insert

Kemudian saya ingin memasukkan node 12 di samping node 8 maka akhirnya akan jadi seperti ini binary tree nya

binary tree sesudah insert


Insertion (memasukkan node) hanya bisa dilakukan kalau ada ruas yang kosong dikasus di atas node 9 pada awalnya hanya memiliki satu child yaitu 8 di bagian kiri.Nah,karena 9 tidak memiliki child kanan maka kita memasukkan node 12 sebagai child kanan dari 9

Implementasi Insert Dengan Python

class Node:
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()
    def inorder(self, root):
        res = []
        if root:
            res = self.inorder(root.left)
            res.append(root.data)
            res = res + self.inorder(root.right)
        return res
    
    def insert(temp,data): 
        q = []  
        q.append(temp)  
        #level order traversal sampai menemukan tempat yang kosong  
        while (len(q)):  
            temp = q[0]  
            q.pop(0)  
            if (not temp.left): 
                temp.left = Node(data)  
                break
            else: 
                q.append(temp.left)  
  
            if (not temp.right): 
                temp.right = Node(data)  
                break
            else: 
                q.append(temp.right)  
            
root = Node(5)#root
root.left = Node(7) 
root.right = Node(9) 
root.left.left = Node(6) 
root.left.right = Node(10) 
root.right.left = Node(8) 
print("Sebelum memasukkan node",end = " ")
print(root.inorder(root))
data = 12
root.insert(data)
print()
print("Setelah memasukkan node",end = " ")
print(root.inorder(root))

Hasil output dari kode di atas


Dalam inorder Traversal, Node 12 berhasil dimasukkan dan menjadi child kanan dari 9





Mungkin itu saja dulu tentang binary tree kalau ada tambahan poin lagi akan saya update..