如何用python构造一个n层的完全二叉树

2024-05-16 03:39

1. 如何用python构造一个n层的完全二叉树

用python构造一个n层的完全二叉树的代码如下: typedef struct {int weight;int parent, lchild, rchild;  } HTNode ,*HuffmanTree; // 动态分配数组存储huffman树  算法设计void createHuffmantree(){ ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode);// 动态分配数组存储huffman树,0号单元未用// m:huffman 树中的结点数(m=2*n-1)for (i=1;ilch= ht[i]->rch=0;     for (i=1;i<=n;++i)  ht[i].weight=w[i]; //初始化,w[i]:n个叶子的权值    for (i=n+1;i<=m,++i) { //建哈夫曼树      select(i-1),s1,s2);  //在ht[k](1<=k<=i-1)中选择两个双亲域为零而权值取最小的结点 :s1和s2      ht[s1].parent= ht[s2].parent=i;       ht[i].lch=s1; ht[i].rch=s2;      ht[i].weight=ht[s1].weight + ht[s2].weight ;   };}

如何用python构造一个n层的完全二叉树

2. python 二叉树是怎么实现的

#coding:utf-8#author:Elvis class TreeNode(object):    def __init__(self):        self.data = '#'        self.l_child = None        self.r_child = None class Tree(TreeNode):    #create a tree    def create_tree(self, tree):        data = raw_input('->')        if data == '#':            tree = None        else:            tree.data = data            tree.l_child = TreeNode()            self.create_tree(tree.l_child)            tree.r_child = TreeNode()            self.create_tree(tree.r_child)     #visit a tree node    def visit(self, tree):        #输入#号代表空树        if tree.data is not '#':            print str(tree.data) + '\t',    #先序遍历    def pre_order(self, tree):        if tree is not None:            self.visit(tree)            self.pre_order(tree.l_child)            self.pre_order(tree.r_child)     #中序遍历    def in_order(self, tree):        if tree is not None:            self.in_order(tree.l_child)            self.visit(tree)            self.in_order(tree.r_child)     #后序遍历    def post_order(self, tree):        if tree is not None:            self.post_order(tree.l_child)            self.post_order(tree.r_child)            self.visit(tree) t = TreeNode()tree = Tree()tree.create_tree(t)tree.pre_order(t)print '\n'tree.in_order(t)print '\n'tree.post_order(t)

3. 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二叉树算法

4. python字典怎么表现二叉树

用python构造一个n层的完全二叉树的代码如下: typedef struct {int weight;int parent, lchild, rchild; } HTNode ,*HuffmanTree; // 动态分配数组存储huffman树 算法设计void createHuffmantree(){ ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode.

5. 如何将数据存储为二叉树python

(1)二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
(2)二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
(3)二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。

如何将数据存储为二叉树python

6. python怎么获得二叉树根到所有叶子的路径

一棵树当中没有子结点(即度为0)的结点,称为叶子结点因为只有一个所以1     2            3                   4是一直这样连下去 的

7. python 查找二叉树是否有子树

python中的二叉树模块内容:
BinaryTree:非平衡二叉树
 AVLTree:平衡的AVL树
 RBTree:平衡的红黑树 
以上是用python写的,相面的模块是用c写的,并且可以做为Cython的包。
FastBinaryTree
 FastAVLTree
 FastRBTree 
特别需要说明的是:树往往要比python内置的dict类慢一些,但是它中的所有数据都是按照某个关键词进行排序的,故在某些情况下是必须使用的。
安装和使用
安装方法
安装环境:
ubuntu12.04, python 2.7.6

python 查找二叉树是否有子树

8. 求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