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.
2. 如何用C语言建立一棵N层的完全二叉树,要求除根结点,其余的结束左结点值为0,右结点值为1。求完全代码!
存储结构
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;i<=m;++i)
ht[i].parent= ht[i]->lch= 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 ;
};
}
3. 如何实现Python多叉树
class node: def __init__(self, data): self._data = data self._children = [] def getdata(self): return self._data def getchildren(self): return self._children def add(self, node): ##if full if len(self._children) == 4: return False else: self._children.append(node) def go(self, data): for child in self._children: if child.getdata() == data: return child return Noneclass tree: def __init__(self): self._head = node('header') def linktohead(self, node): self._head.add(node) def insert(self, path, data): cur = self._head for step in path: if cur.go(step) == None: return False else: cur = cur.go(step) cur.add(node(data)) return True def search(self, path): cur = self._head for step in path: if cur.go(step) == None: return None else: cur = cur.go(step) return cur '''define node'''a = node('A')b = node('B')c = node('C')d = node('D')e = node('E')f = node('F')g = node('G')h = node('H')i = node('I')j = node('J')k = node('K')l = node('L')m = node('M')n = node('N')o = node('O')'''adding node to build true'''a.add(b)a.add(g)a.add(h)b.add(c)b.add(e)g.add(i)g.add(j)g.add(k)g.add(l)h.add(m)h.add(n)h.add(o)c.add(d)c.add(f)i.add(node(29))j.add(node(28))k.add(node(27))l.add(node(26))m.add(node(25))n.add(node(24))o.add(node(23))f.add(node(30))tree = tree()tree.linktohead(a)#testcaseprint 'Node',tree.search("ABE").getdata()print 'Node',tree.search("ABC").getdata()print 'Node',tree.search("AHM").getdata()tree.insert("ABCD", 1)for i in d.getchildren(): print 'value after', d.getdata(),' is ', i.getdata()
4. n层的完全二叉树(堆)最多有几个元素C++数据结构
是2^n -1,这个因为 1+2+4+8+16+……+2^(n-1) = 2^n -1,不信你可以代几个数字进去试一下哦!
n levels 的意思是n层。
如果一棵树只有一个根结点,我们说它是1层,但深度是0.
5. 如何将嵌套的字典画成一个二叉树
用python构造一个n层的完全二叉树的代码如下:typedefstruct{intweig
6. 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
7. 用java怎么构造一个二叉树?
二叉树的相关操作,包括创建,中序、先序、后序(递归和非递归),其中重点的是java在先序创建二叉树和后序非递归遍历的的实现。
package com.algorithm.tree;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.concurrent.LinkedBlockingQueue;
public class Tree {
private Node root;
public Tree() {
}
public Tree(Node root) {
this.root = root;
}
//创建二叉树
public void buildTree() {
Scanner scn = null;
try {
scn = new Scanner(new File("input.txt"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
root = createTree(root,scn);
}
//先序遍历创建二叉树
private Node createTree(Node node,Scanner scn) {
String temp = scn.next();
if (temp.trim().equals("#")) {
return null;
} else {
node = new Node((T)temp);
node.setLeft(createTree(node.getLeft(), scn));
node.setRight(createTree(node.getRight(), scn));
return node;
}
}
//中序遍历(递归)
public void inOrderTraverse() {
inOrderTraverse(root);
}
public void inOrderTraverse(Node node) {
if (node != null) {
inOrderTraverse(node.getLeft());
System.out.println(node.getValue());
inOrderTraverse(node.getRight());
}
}
//中序遍历(非递归)
public void nrInOrderTraverse() {
Stack stack = new Stack();
Node node = root;
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.getLeft();
}
node = stack.pop();
System.out.println(node.getValue());
node = node.getRight();
}
}
//先序遍历(递归)
public void preOrderTraverse() {
preOrderTraverse(root);
}
public void preOrderTraverse(Node node) {
if (node != null) {
System.out.println(node.getValue());
preOrderTraverse(node.getLeft());
preOrderTraverse(node.getRight());
}
}
//先序遍历(非递归)
public void nrPreOrderTraverse() {
Stack stack = new Stack();
Node node = root;
while (node != null || !stack.isEmpty()) {
while (node != null) {
System.out.println(node.getValue());
stack.push(node);
node = node.getLeft();
}
node = stack.pop();
node = node.getRight();
}
}
//后序遍历(递归)
public void postOrderTraverse() {
postOrderTraverse(root);
}
public void postOrderTraverse(Node node) {
if (node != null) {
postOrderTraverse(node.getLeft());
postOrderTraverse(node.getRight());
System.out.println(node.getValue());
}
}
//后续遍历(非递归)
public void nrPostOrderTraverse() {
Stack stack = new Stack();
Node node = root;
Node preNode = null;//表示最近一次访问的节点
while (node != null || !stack.isEmpty()) {
while (node != null) {
stack.push(node);
node = node.getLeft();
}
node = stack.peek();
if (node.getRight() == null || node.getRight() == preNode) {
System.out.println(node.getValue());
node = stack.pop();
preNode = node;
node = null;
} else {
node = node.getRight();
}
}
}
//按层次遍历
public void levelTraverse() {
levelTraverse(root);
}
public void levelTraverse(Node node) {
Queue queue = new LinkedBlockingQueue();
queue.add(node);
while (!queue.isEmpty()) {
Node temp = queue.poll();
if (temp != null) {
System.out.println(temp.getValue());
queue.add(temp.getLeft());
queue.add(temp.getRight());
}
}
}
}
//树的节点
class Node {
private Node left;
private Node right;
private T value;
public Node() {
}
public Node(Node left,Node right,T value) {
this.left = left;
this.right = right;
this.value = value;
}
public Node(T value) {
this(null,null,value);
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
测试代码:
package com.algorithm.tree;
public class TreeTest {
/**
* @param args
*/
public static void main(String[] args) {
Tree tree = new Tree();
tree.buildTree();
System.out.println("中序遍历");
tree.inOrderTraverse();
tree.nrInOrderTraverse();
System.out.println("后续遍历");
//tree.nrPostOrderTraverse();
tree.postOrderTraverse();
tree.nrPostOrderTraverse();
System.out.println("先序遍历");
tree.preOrderTraverse();
tree.nrPreOrderTraverse();
//
}
}
8. python字典怎么表现二叉树
用python构造一个n层的完全二叉树的代码如下: typedef struct {int weight;int parent, lchild, rchild; } HTNode ,*HuffmanTree; // 动态分配数组存储huffman树 算法设计void createHuffmantree(){ ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode.