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)