python二叉树算法

2024-05-18 14:10

1. python二叉树算法

定义一颗二叉树,请看官自行想象其形状


class BinNode( ):
    def __init__( self, val ):
        self.lchild = None
        self.rchild = None
        self.value = val

binNode1 = BinNode( 1 )
binNode2 = BinNode( 2 )
binNode3 = BinNode( 3 )
binNode4 = BinNode( 4 )
binNode5 = BinNode( 5 )
binNode6 = BinNode( 6 )

binNode1.lchild = binNode2
binNode1.rchild = binNode3
binNode2.lchild = binNode4
binNode2.rchild = binNode5
binNode3.lchild = binNode6

python二叉树算法

2. 四则运算表达式的求值 利用二叉树

实现该表达式的求值.要求的功能有(1)以字符的形式从终端输入语法正确,不含变量的实型数据算术四则运算表达式,创建用二叉树表达的表达式,(2)实现对表达式的求值

3. 求Python二叉树的几个算法 求几个二叉树的method! 1) 给一个值,然后在树中找出该值

你好:
二叉树算法,网上是比较多的;
可能按照你的需求不是很多:
下面是我用的一个,不过你可以借鉴一下的:
# -*- coding: cp936 -*-import osclass Node(object):    """docstring for Node"""    def __init__(self, v = None, left = None, right=None, parent=None):        self.value = v        self.left = left        self.right = right        self.parent = parentclass BTree(object):    """docstring for BtTee """    def __init__(self):        self.root = None        self.size = 0    def insert(self, node):        n = self.root        if n == None:            self.root = node            return        while True:            if node.value  n.value:                if n.right == None:                    n.parent = n                    n.right = node                    break                else:                    n = n.right    def find(self, v):        n = self.root # http://yige.org        while True:            if n == None:                return None            if v == n.value:                return n            if v  n.value:                n = n.right    def find_successor(node):        '''查找后继结点'''        assert node != None and node.right != None        n = node.right        while n.left != None:            n = n.left        return n    def delete(self, v):        n = self.find(v)        print "delete:",n.value        del_parent = n.parent        if del_parent == None:            self.root = None;            return        if n != None:            if n.left != None and n.right != None:                succ_node = find_successor(n)                parent = succ_node.parent                if succ_node == parent.left:                    #if succ_node is left sub tree                    parent.left = None                if succ_node == parent.right:                    #if succ_node is right sub tree                    parent.right = None                if del_parent.left == n:                    del_parent.left = succ_node                if del_parent.right == n:                    del_parent.right = succ_node                succ_node.parent = n.parent                succ_node.left = n.left                succ_node.right = n.right                del n            elif n.left != None or n.right != None:                if n.left != None:                    node = n.left                else:                    node = n.right                node.parent = n.parent                if del_parent.left == n:                    del_parent.left = node                if del_parent.right == n:                    del_parent.right = node                del n            else:                if del_parent.left == n:                    del_parent.left = None                if del_parent.right == n:                    del_parent.right = None     def tranverse(self):        def pnode(node):            if node == None:                return            if node.left != None:                pnode(node.left)            print node.value            if node.right != None:                pnode(node.right)        pnode(self.root)def getopts():    import optparse, locale    parser = optparse.OptionParser()    parser.add_option("-i", "--input", dest="input", help=u"help name", metavar="INPUT")    (options, args) = parser.parse_args()    #print options.input    return (options.input) if __name__ == '__main__':     al = [23, 45, 67, 12, 78,90, 11, 33, 55, 66, 89, 88 ,5,6,7,8,9,0,1,2,678]    bt = BTree()    for x in al :        bt.insert(Node(x))    bt.delete(12)    bt.tranverse()    n = bt.find(12)    if n != None:        print "find valud:",n.value

求Python二叉树的几个算法 求几个二叉树的method! 1) 给一个值,然后在树中找出该值

4. Python怎么实现二叉树排序

常用的排序算法(主要指面试中)包含两大类,一类是基础比较模型的,也就是排序的过程,是建立在两个数进行对比得出大小的基础上,这样的排序算法又可以分为两类:一类是基于数组的,一类是基于树的;基础数组的比较排序算法主要有:冒泡法,插入法,选择法,归并法,快速排序法;基础树的比较排序算法主要有:堆排序和二叉树排序;基于非比较模型的排序,主要有桶排序和位图排序(个人认为这两个属于同一思路的两个极端)。

5. 由输入的四则算术表达式字符串,动态生成算术表达式所对应的二叉树,通过二叉树遍历求值并输出。 【实验

可以看看我的博客二叉树实现:http://blog.csdn.net/acvcla/article/details/28137067,栈实现:http://blog.csdn.net/acvcla/article/details/41732447,这个和你说的一样,满意请采纳,不懂的可以给我发邮件讨论

由输入的四则算术表达式字符串,动态生成算术表达式所对应的二叉树,通过二叉树遍历求值并输出。 【实验

6. 设计一个四则运算的程序

给你说个思路,代码自己写吧,不太简单呢。
说白了,就是一个堆栈。
有两个栈,一个是操作数,一个是操作符。每次读到操作符,就跟栈顶的操作符比较优先级(当然是自己先写好的),然是确定是否出栈。如果出栈,之后再和下一个比较。为了使第一个进栈的字符有所比较,通常先压入一个“#”。
在操作符出栈时,同时弹出两个操作数,并将结果压回去。

7. 编写一个程序,实现二叉树的各种基本运算

//文件名:exp7-1.cpp
#include 
typedef char ElemType;
typedef struct node
{
 ElemType data;    //数据元素
 struct node *lchild;  //指向左孩子
 struct node *rchild;  //指向右孩子
} BTNode;
extern void CreateBTNode(BTNode *&b,char *str);
extern BTNode *FindNode(BTNode *b,ElemType x);
extern BTNode *LchildNode(BTNode *p);
extern BTNode *RchildNode(BTNode *p);
extern int BTNodeDepth(BTNode *b);
extern void DispBTNode(BTNode *b);
extern int BTWidth(BTNode *b);
extern int Nodes(BTNode *b);
extern int LeafNodes(BTNode *b);
extern void DestroyBTNode(BTNode *&b);
void main()
{ BTNode *b,*p,*lp,*rp;;
 CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
 printf("二叉树的基本运算如下:\n");
 printf("  (1)输出二叉树:");DispBTNode(b);printf("\n");
 printf("  (2)H节点:");
 p=FindNode(b,'H');
 if (p!=NULL)
 { lp=LchildNode(p);
  if (lp!=NULL) 
   printf("左孩子为%c ",lp->data);
  else
   printf("无左孩子 ");
  rp=RchildNode(p);
  if (rp!=NULL)
   printf("右孩子为%c",rp->data);
  else
   printf("无右孩子 ");
 }
 printf("\n");
 printf("  (3)二叉树b的深度:%d\n",BTNodeDepth(b));
 printf("  (4)二叉树b的宽度:%d\n",BTWidth(b));
 printf("  (5)二叉树b的节点个数:%d\n",Nodes(b));
 printf("  (6)二叉树b的叶子节点个数:%d\n",LeafNodes(b));
 printf("  (7)释放二叉树b\n");
 DestroyBTNode(b);
}

编写一个程序,实现二叉树的各种基本运算

8. python编写欧式二叉树的问题

所以我就遇到了一下几个问题:
1、该怎么把二叉树各个节点连起来?
2、怎么定义内部数据成员?
3、如何实例化左右孩子?

在网上也没找到比较简单比较通用的Python二叉树类实现,所以我花了点时间自己写一个。
[python] view plain copy 在CODE上查看代码片派生到我的代码片
class Tree:  
def __init__(self, val = '#', left = None, right = None):  
self.val = val  
self.left = left  
self.right = right  

#前序构建二叉树  
def FrontBuildTree(self):  
temp = input('Please Input: ')  
node = Tree(temp)  
if(temp != '#'):  
node.left = self.FrontBuildTree()  
node.right = self.FrontBuildTree()  
return node#因为没有引用也没有指针,所以就把新的节点给返回回去  

#前序遍历二叉树  
def VisitNode(self):  
print(self.val)  
if(self.val != '#'):  
self.left.VisitNode()  
self.right.VisitNode()  

if __name__ == '__main__':  
root = Tree()  
root = root.FrontBuildTree()  
root.VisitNode()