二叉樹、list單向鏈表的實現( python版 Java版)-17-9-18

Java版:

二叉樹

myBtree類:

public class myBtree {

    private Node root;

    class Node{
        private  int data;
        private  Node left;
        private  Node right;


        public void zhongxu() {
            if(this.left!=null){
                this.left.zhongxu();
            }
            System.out.println(this.data) ;
            if(this.right!=null){
                this.right.zhongxu();
            }
        }

        public void add(Node node) {
            if(this.data>node.data){
                if (this.left==null){
                    this.left=node;
                }else {
                    left.add(node);
                }


            }
            if(this.data<node.data){
                if (this.right==null){
                    this.right=node;
                }else {
                    right.add(node);
                }
            }
        }
    }

    public void add(int data) {
        Node node = new  Node();
        node.data=data;


        if (root==null){
            root=node;
        }else{
            root.add(node);
        }

    }

    public void zhongxu() {
        root.zhongxu();
    }
}

myBtreeTest類:


public class myBtreeTest {
    public static void main(String[] args) {
        myBtree myB = new myBtree();
        myB.add(12);
        myB.add(16);
        myB.add(15);
        myB.add(18);
        myB.add(9);
        myB.add(10);
        myB.add(8);
        myB.add(7);

        //二叉樹終須排列 主要利用遞歸思想 通過遞歸判斷左右分支並添加節點,通過遞歸遍歷輸出
         myB.zhongxu();

    }

}


python 版:

二叉樹:

class mybtree:
    def __init__(self):
        self.root=None
    def zhong(self):
        self.root.zhong()
    def add(self,data):
        n=self.node()
        n.data=data
        if self.root is None:
            self.root=n
        else:
            self.root.add(n)


    class node:
        def __init__(self):
            self.data=None
            self.left=None
            self.right=None
        def add(self,n):
            if self.data > n.data :
                if self.left is None:
                    self.left = n
                else:
                    self.left.add(n)
            if self.data < n.data:
                if self.right is None:
                    self.right = n
                else:
                    self.right.add(n)


        def zhong(self):
            if self.left is not  None :
                self.left.zhong()
            print(self.data)
            if self.right is not  None :
                self.right.zhong()


tree = mybtree()
tree.add(11)
tree.add(15)
tree.add(8)
tree.add(9)
tree.add(6)
tree.zhong()


-----華麗的分割線

Java版:

單向鏈表lLinkedList:

mylist類:

package Demo;


public class mylist<T> {

private Node head;
private Node tail;
private int size;


class Node{
private  T data;
private Node next;
}

public void add(T data) {
size++;
Node node = new Node();
node.data=data; 
if(head == null){
head=node;
}else{
tail.next=node;
}
tail=node;
}


public int size() {
return size;
}


public T get(int i) {
Node p = head;
for (int j = 0;j<i; j++) {
p=p.next;
}
return p.data;
}


}

mylistTest類:

package Demo;

public class mylistTest {

public static void main(String[] args) {
mylist my = new mylist();
my.add("zs");
my.add(123);
my.add("ls");

for (int i = 0; i < my.size(); i++) {
System.out.println(my.get(i));
}
}

}


python版本:

單向鏈表LinkedList:

'''
定義迭代:
    兩種:
        1.yeild 生成器 函數編程方式
        2.類中提供__iter__ __next__面向對象編程方式
         __iter__ 的方式__要返回一個具有__next__方法的對象的引用
 拓展:
    程序員不能得到對象,得到的是對象的引用。引用是個整數,佔4個字節
    引用的值是引用順序,而不是引用數值。
'''


class MyList:
    class Node:
        def __init__(self):
            self.data=None
            self.next=None
    def __init__(self):
        self.head=None
        self.tail=None
        self.size=0
    def add(self,data):
        self.size +=1
        n=self.Node()
        n.data=data
        if self.head == None:
            self.head=n
        else:
            self.tail.next=n
        self.tail=n
    def getSize(self):
        return self.size
    def get(self,i):
        p=self.head
        for j in range(0,i):
            p=p.next
        return p.data


my=MyList()
my.add("qsg")
my.add("asd")
my.add(112)


for i in range(0,my.getSize()):
    print(my.get(i))


#生成器
print("生成器")
def show():
    for i in range(10,0,-1):
        yield i


for i in show():
    print(i)
#迭代器
class MyList:
    class Node:
        def __init__(self):
            self.data=None
            self.next=None
    def __init__(self):
        self.head=None
        self.tail=None
        self.size=0
    def add(self,data):
        self.size +=1
        n=self.Node()
        n.data=data
        if self.head == None:
            self.head=n
        else:
            self.tail.next=n
        self.tail=n
    def getSize(self):
        return self.size
    def get(self,i):
        p=self.head
        for j in range(0,i):
            p=p.next
        return p.data
    def __iter__(self):
        self.p=self.head
        return self
    def __next__(self):
        p1 = self.p
        self.p = self.p.next
        return p1.data
        # if self.p is None: 加上異常解決控制檯輸出錯誤
        #
my1=MyList()
my.add("qsg")
my.add("asd")
my.add(112)


for i in my1:
    print(i)


發佈了36 篇原創文章 · 獲贊 14 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章