求Matlab大神 一个 二叉树程序 帮我看看 哪儿能 改参数 从而改变 角度 大小

2024-05-16

1. 求Matlab大神 一个 二叉树程序 帮我看看 哪儿能 改参数 从而改变 角度 大小

n和b都能改,n控制二叉树的层数,b控制角度,分叉角度的一般.程序中的a似乎没用到
n=3,b=pi/6时图像如下

求Matlab大神 一个 二叉树程序 帮我看看 哪儿能 改参数 从而改变 角度 大小

2. 用java怎么构造一个二叉树呢?

java构造二叉树,可以通过链表来构造,如下代码:
public class BinTree {public final static int MAX=40;BinTree []elements = new BinTree[MAX];//层次遍历时保存各个节点    int front;//层次遍历时队首    int rear;//层次遍历时队尾private Object data; //数据元数private BinTree left,right; //指向左,右孩子结点的链public BinTree(){}public BinTree(Object data){ //构造有值结点   this.data = data;   left = right = null;}public BinTree(Object data,BinTree left,BinTree right){ //构造有值结点   this.data = data;   this.left = left;   this.right = right;}public String toString(){   return data.toString();}//前序遍历二叉树public static void preOrder(BinTree parent){      if(parent == null)      return;     System.out.print(parent.data+" ");     preOrder(parent.left);     preOrder(parent.right);}//中序遍历二叉树public void inOrder(BinTree parent){   if(parent == null)      return;   inOrder(parent.left);   System.out.print(parent.data+" ");     inOrder(parent.right);}//后序遍历二叉树public void postOrder(BinTree parent){   if(parent == null)    return;   postOrder(parent.left);   postOrder(parent.right);   System.out.print(parent.data+" ");}// 层次遍历二叉树 public void LayerOrder(BinTree parent){      elements[0]=parent;     front=0;rear=1;   while(front<rear)   {    try    {        if(elements[front].data!=null)        {           System.out.print(elements[front].data + " ");           if(elements[front].left!=null)          elements[rear++]=elements[front].left;           if(elements[front].right!=null)          elements[rear++]=elements[front].right;           front++;        }    }catch(Exception e){break;}   }}//返回树的叶节点个数public int leaves(){   if(this == null)    return 0;   if(left == null&&right == null)    return 1;   return (left == null ? 0 : left.leaves())+(right == null ? 0 : right.leaves());}//结果返回树的高度public int height(){   int heightOfTree;   if(this == null)    return -1;   int leftHeight = (left == null ? 0 : left.height());   int rightHeight = (right == null ? 0 : right.height());   heightOfTree = leftHeight<rightHeight?rightHeight:leftHeight;   return 1 + heightOfTree;}//如果对象不在树中,结果返回-1;否则结果返回该对象在树中所处的层次,规定根节点为第一层public int level(Object object){   int levelInTree;   if(this == null)    return -1;   if(object == data)    return 1;//规定根节点为第一层   int leftLevel = (left == null?-1:left.level(object));   int rightLevel = (right == null?-1:right.level(object));   if(leftLevel<0&&rightLevel<0)    return -1;   levelInTree = leftLevel<rightLevel?rightLevel:leftLevel;   return 1+levelInTree;  }//将树中的每个节点的孩子对换位置public void reflect(){   if(this == null)    return;   if(left != null)    left.reflect();   if(right != null)    right.reflect();   BinTree temp = left;   left = right;   right = temp;}// 将树中的所有节点移走,并输出移走的节点public void defoliate(){   if(this == null)    return;   //若本节点是叶节点,则将其移走   if(left==null&&right == null)   {    System.out.print(this + " ");    data = null;    return;   }   //移走左子树若其存在   if(left!=null){    left.defoliate();    left = null;   }   //移走本节点,放在中间表示中跟移走...   String innerNode += this + " ";   data = null;   //移走右子树若其存在   if(right!=null){    right.defoliate();    right = null;   }}   /*** @param args*/public static void main(String[] args) {   // TODO Auto-generated method stub   BinTree e = new BinTree("E");   BinTree g = new BinTree("G");   BinTree h = new BinTree("H");   BinTree i = new BinTree("I");   BinTree d = new BinTree("D",null,g);     BinTree f = new BinTree("F",h,i);   BinTree b = new BinTree("B",d,e);   BinTree c = new BinTree("C",f,null);   BinTree tree = new BinTree("A",b,c);          System.out.println("前序遍历二叉树结果: ");        tree.preOrder(tree);        System.out.println();        System.out.println("中序遍历二叉树结果: ");        tree.inOrder(tree);        System.out.println();        System.out.println("后序遍历二叉树结果: ");        tree.postOrder(tree);        System.out.println();      System.out.println("层次遍历二叉树结果: ");     tree.LayerOrder(tree);     System.out.println();        System.out.println("F所在的层次: "+tree.level("F"));        System.out.println("这棵二叉树的高度: "+tree.height());         System.out.println("--------------------------------------");         tree.reflect();          System.out.println("交换每个节点的孩子节点后......");          System.out.println("前序遍历二叉树结果: ");        tree.preOrder(tree);        System.out.println();        System.out.println("中序遍历二叉树结果: ");        tree.inOrder(tree);        System.out.println();        System.out.println("后序遍历二叉树结果: ");        tree.postOrder(tree);        System.out.println();      System.out.println("层次遍历二叉树结果: ");     tree.LayerOrder(tree);     System.out.println();        System.out.println("F所在的层次: "+tree.level("F"));        System.out.println("这棵二叉树的高度: "+tree.height());}

3. 用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();
		
//
	}

}

用java怎么构造一个二叉树?

4. 数据结构问题 由4个节点可以构造出多少种不同的二叉树?

由4个节点可以构造出14种不同的二叉树。二叉树节点公式:B[n] = C[n,2n] / (n+1)。二叉树组合数C[n,2n]的n为上标,2n为下标,将n=4代入公式,可以得出,B[4] = C[4,8] / (4+1) = 8! / (4! * 4! * 5) = 8*7*6/(4*3*2) = 14。

扩展资料:
有N个结点的二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
1、若I为结点编号则 如果I>1,则其父结点的编号为I/2。
2、如果2*IN,则无左孩子。
3、如果2*I+1N,则无右孩子。
4、设有i个枝点,I为所有枝点的道路长度总和,J为叶的道路长度总和J=I+2i。5、对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1。

5. matlab中用二叉树方法求欧式期权价格的script,求各位大神把脚本求出来啊,在线等挺急的

function EXS()
S=input('30:\n');%请输入当前股价
K=input('35:\n');%请输入股票执行价格
r=input('0.03:\n');%请输入无风险利率
theta=input('0.01:\n');%请输入波动率
T=input('2:\n');%请输入到期时间
bc=input('0.1:\n');%请输入步长
q=input('0.1:\n');%请输入股息率
KZ=input('1\n');%是否为看涨期权?若是请输入1,若不是请输入其他任意值
u=exp(theta*(T/bc)^0.5);

matlab中用二叉树方法求欧式期权价格的script,求各位大神把脚本求出来啊,在线等挺急的

6. 由4个结点可以构造出()种不同形态的二叉树

14种。
公式:B[n] = C[n,2n] / (n+1)
其中,组合数C[n,2n]的n为上标,2n为下标,将n=4代入公式,B[4] = C[4,8] / (4+1) = 8! / (4! * 4! * 5) = 8*7*6/(4*3*2) = 14
所以,由4个结点可以构造出 14 种不同形态的二叉树。
一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。

扩展资料:
相关术语
树的结点(node):包含一个数据元素及若干指向子树的分支;
孩子结点(child node):结点的子树的根称为该结点的孩子;
双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;
兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;
祖先结点: 从根到该结点的所经分支上的所有结点;
子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙;
结点层:根结点的层定义为1;根的孩子为第二层结点,依此类推;
树的深度:树中最大的结点层;
结点的度:结点子树的个数;
树的度: 树中最大的结点度;
叶子结点:也叫终端结点,是度为 0 的结点;
分枝结点:度不为0的结点;
有序树:子树有序的树,如:家族树;
无序树:不考虑子树的顺序。
参考资料来源:百度百科-二叉树    

7. 已知二叉树的前序和中序,构造该二叉树的方法是什么

以下面的例题为例进行讲解:
已知一棵二叉树的先序遍历序列和中序遍历序列分别是ABDCEF、BDAECF,求二叉树及后序遍历序列。
分析:先序遍历序列的第一个字符为根结点。对于中序遍历,根结点在中序遍历序列的中间,左边部分是根结点的左子树的中序遍历序列,右边部分是根结点的右子树的中序遍历序列。

先序:ABDCEF  -->  A  BD CEF
中序:BDAECF  -->  BD A  ECF
得出结论:A是树根,A有左子树和右子树,左子树有BD结点,右子树有CEF结点。

先序:BD  -->  B D
中序:BD  -->  B D
得出结论:B是左子树的根结点,B无左子树,有右子树(只有D结点)。

先序:CEF  -->  C E F
中序:ECF  -->  E C F
得出结论:C是右子树的根结点,C有左子树(只有E结点),有右子树(只有F结点)。

还原二叉树为:
             A
            B                 C
              D             E    F

后序遍历序列:DBEFCA

已知二叉树的前序和中序,构造该二叉树的方法是什么

8. 请问二叉树的三种递归遍历 用Matlab 代码如何实现?(我知道C++的代码)

把C的搬上来,翻译过去即可。