当前位置:首页经验技巧Excel经验excel图表

二叉树模型怎么用excel表格

2024-07-19 12:42:57

1.二叉树的数据结构设计和用法说明

#ifndef BinaryTree_H #define BinaryTree_H #include #include class BinaryTree { private: typedef int Item; typedef struct TreeNode { Item Node; TreeNode* pRight; TreeNode* pLeft; TreeNode(Item node = 0, TreeNode* pright = NULL, TreeNode* pleft = NULL) : Node(node) , pRight(pright) , pLeft(pleft) { } }TreeNode, *PTreeNode; public: enum TraverseType { PREORDER = 0, // 前序 INORDER = 1, // 中序 POSTORDER = 2, // 后序 LEVELORDER = 3 // 层序 }; BinaryTree(Item Array[], int nLength); ~BinaryTree(); PTreeNode GetRoot() { return m_pRoot; } // 遍历树的对外接口 // 指定遍历类型和是否是非递归遍历,默认是递归遍历 void Traverse(TraverseType traversetype, bool bRec = true); private: PTreeNode CreateTreeImpl(Item Array[], int nLength); void DetroyTreeImpl(PTreeNode pTreenode); void PreTraverseImpl(PTreeNode pTreenode); // 递归前序遍历树 void InTraverseImpl(PTreeNode pTreenode); // 递归中序遍历树 void PostTraverseImpl(PTreeNode pTreenode); // 递归后序遍历树 void NoRecPreTraverseImpl(PTreeNode pTreenode); // 非递归前序遍历树 void NoRecInTraverseImpl(PTreeNode pTreenode); // 非递归中序遍历树 void NoRecPostTraverseImpl(PTreeNode pTreenode); // 非递归后序遍历树 void LevelTraverseImpl(PTreeNode pTreenode); PTreeNode m_pRoot; // 根结点 // 采用STL里面的stack作为模拟保存链表结点的stack容器 typedef std::stack TreeNodeStack; }; #endif #include #include #include #include "BinaryTree.h" BinaryTree::BinaryTree(Item Array[], int nLength) : m_pRoot(NULL) { assert(NULL != Array); assert(nLength > 0); m_pRoot = CreateTreeImpl(Array, nLength); } BinaryTree::~BinaryTree() { DetroyTreeImpl(m_pRoot); } // 按照中序递归创建树 BinaryTree::PTreeNode BinaryTree::CreateTreeImpl(Item Array[], int nLength) { int mid = nLength / 2; PTreeNode p = new TreeNode(Array[mid]); if (nLength > 1) { p->pLeft = CreateTreeImpl(Array, nLength / 2); p->pRight = CreateTreeImpl(Array + mid + 1, nLength / 2 - 1); } return p; } void BinaryTree::DetroyTreeImpl(PTreeNode pTreenode) { if (NULL != pTreenode->pLeft) { DetroyTreeImpl(pTreenode->pLeft); } if (NULL != pTreenode->pRight) { DetroyTreeImpl(pTreenode->pRight); } delete pTreenode; pTreenode = NULL; } // 遍历树的对外接口 // 指定遍历类型和是否是非递归遍历,默认是递归遍历 void BinaryTree::Traverse(TraverseType traversetype, bool bRec /**//*= true*/) { switch (traversetype) { case PREORDER: // 前序 { if (true == bRec) { std::cout << "递归前序遍历树\n"; PreTraverseImpl(m_pRoot); } else { std::cout << "非递归前序遍历树\n"; NoRecPreTraverseImpl(m_pRoot); } } break; case INORDER: // 中序 { if (true == bRec) { std::cout << "递归中序遍历树\n"; InTraverseImpl(m_pRoot); } else { std::cout << "非递归中序遍历树\n"; NoRecInTraverseImpl(m_pRoot); } } break; case POSTORDER: // 后序 { if (true == bRec) { std::cout << "递归后序遍历树\n"; PostTraverseImpl(m_pRoot); } else { std::cout << "非递归后序遍历树\n"; NoRecPostTraverseImpl(m_pRoot); } } break; case LEVELORDER: // 层序 { std::cout << "层序遍历树\n"; LevelTraverseImpl(m_pRoot); } } std::cout << std::endl; } // 递归前序遍历树 void BinaryTree::PreTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; std::cout << "Item = " << pTreenode->Node << std::endl; PreTraverseImpl(pTreenode->pLeft); PreTraverseImpl(pTreenode->pRight); } // 非递归前序遍历树 void BinaryTree::NoRecPreTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; TreeNodeStack NodeStack; PTreeNode pNode; NodeStack.push(pTreenode); while (!NodeStack.empty()) { while (NULL != (pNode = NodeStack.top())) // 向左走到尽头 { std::cout << "Item = " << pNode->Node << std::endl; // 访问当前结点 NodeStack.push(pNode->pLeft); // 左子树根结点入栈 } NodeStack.pop(); // 左子树根结点退栈 if (!NodeStack.empty()) { pNode = NodeStack.top(); NodeStack.pop(); // 当前结点退栈 NodeStack.push(pNode->pRight); // 当前结点的右子树根结点入栈 } } } // 中序遍历树 // 中序遍历输出的结果应该和用来初始化树的数组的排列顺序一致 void BinaryTree::InTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; if (NULL != pTreenode->pLeft) { InTraverseImpl(pTreenode->pLeft); } std::cout << "Item = " << pTreenode->Node << std::endl; if (NULL != pTreenode->pRight) { InTraverseImpl(pTreenode->pRight); } } // 非递归中序遍历树 void BinaryTree::NoRecInTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; TreeNodeStack NodeStack; PTreeN。

2.如何将二叉树从二期模型向n期模型进行拓展?由此导出布莱克—斯科

可参考:

期权、期货及其他衍生产品(原书第8版)

* 作者: (加)约翰C.赫尔(John C.Hull)

* 译者: *** 索吾林

* 丛书名: 华章教材经典译丛

* 出版社:机械工业出版社

* ISBN:9787111358213

* 出版日期:2012 年1月

第12章二叉树180

12.1单步二叉树模型与无套利方法180

12.2风险中性定价183

12.3两步二叉树184

12.4看跌期权实例186

12.5美式期权186

12.6Delta187

12.7选取u和d使二叉树与波动率吻合188

12.8二叉树公式189

12.9增加二叉树的时间步数190

12.10使用DerivaGem软件190

12.11对于其他标的资产的期权190

小结193

推荐阅读193

练习题194

作业题194

附录12A 由二叉树模型推导布莱克斯科尔斯默顿期权定价公式195

3.二叉树的数据结构设计和用法说明

#ifndef BinaryTree_H #define BinaryTree_H #include #include class BinaryTree { private: typedef int Item; typedef struct TreeNode { Item Node; TreeNode* pRight; TreeNode* pLeft; TreeNode(Item node = 0, TreeNode* pright = NULL, TreeNode* pleft = NULL) : Node(node) , pRight(pright) , pLeft(pleft) { } }TreeNode, *PTreeNode; public: enum TraverseType { PREORDER = 0, // 前序 INORDER = 1, // 中序 POSTORDER = 2, // 后序 LEVELORDER = 3 // 层序 }; BinaryTree(Item Array[], int nLength); ~BinaryTree(); PTreeNode GetRoot() { return m_pRoot; } // 遍历树的对外接口 // 指定遍历类型和是否是非递归遍历,默认是递归遍历 void Traverse(TraverseType traversetype, bool bRec = true); private: PTreeNode CreateTreeImpl(Item Array[], int nLength); void DetroyTreeImpl(PTreeNode pTreenode); void PreTraverseImpl(PTreeNode pTreenode); // 递归前序遍历树 void InTraverseImpl(PTreeNode pTreenode); // 递归中序遍历树 void PostTraverseImpl(PTreeNode pTreenode); // 递归后序遍历树 void NoRecPreTraverseImpl(PTreeNode pTreenode); // 非递归前序遍历树 void NoRecInTraverseImpl(PTreeNode pTreenode); // 非递归中序遍历树 void NoRecPostTraverseImpl(PTreeNode pTreenode); // 非递归后序遍历树 void LevelTraverseImpl(PTreeNode pTreenode); PTreeNode m_pRoot; // 根结点 // 采用STL里面的stack作为模拟保存链表结点的stack容器 typedef std::stack TreeNodeStack; }; #endif #include #include #include #include "BinaryTree.h" BinaryTree::BinaryTree(Item Array[], int nLength) : m_pRoot(NULL) { assert(NULL != Array); assert(nLength > 0); m_pRoot = CreateTreeImpl(Array, nLength); } BinaryTree::~BinaryTree() { DetroyTreeImpl(m_pRoot); } // 按照中序递归创建树 BinaryTree::PTreeNode BinaryTree::CreateTreeImpl(Item Array[], int nLength) { int mid = nLength / 2; PTreeNode p = new TreeNode(Array[mid]); if (nLength > 1) { p->pLeft = CreateTreeImpl(Array, nLength / 2); p->pRight = CreateTreeImpl(Array + mid + 1, nLength / 2 - 1); } return p; } void BinaryTree::DetroyTreeImpl(PTreeNode pTreenode) { if (NULL != pTreenode->pLeft) { DetroyTreeImpl(pTreenode->pLeft); } if (NULL != pTreenode->pRight) { DetroyTreeImpl(pTreenode->pRight); } delete pTreenode; pTreenode = NULL; } // 遍历树的对外接口 // 指定遍历类型和是否是非递归遍历,默认是递归遍历 void BinaryTree::Traverse(TraverseType traversetype, bool bRec /**//*= true*/) { switch (traversetype) { case PREORDER: // 前序 { if (true == bRec) { std::cout << "递归前序遍历树\n"; PreTraverseImpl(m_pRoot); } else { std::cout << "非递归前序遍历树\n"; NoRecPreTraverseImpl(m_pRoot); } } break; case INORDER: // 中序 { if (true == bRec) { std::cout << "递归中序遍历树\n"; InTraverseImpl(m_pRoot); } else { std::cout << "非递归中序遍历树\n"; NoRecInTraverseImpl(m_pRoot); } } break; case POSTORDER: // 后序 { if (true == bRec) { std::cout << "递归后序遍历树\n"; PostTraverseImpl(m_pRoot); } else { std::cout << "非递归后序遍历树\n"; NoRecPostTraverseImpl(m_pRoot); } } break; case LEVELORDER: // 层序 { std::cout << "层序遍历树\n"; LevelTraverseImpl(m_pRoot); } } std::cout << std::endl; } // 递归前序遍历树 void BinaryTree::PreTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; std::cout << "Item = " << pTreenode->Node << std::endl; PreTraverseImpl(pTreenode->pLeft); PreTraverseImpl(pTreenode->pRight); } // 非递归前序遍历树 void BinaryTree::NoRecPreTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; TreeNodeStack NodeStack; PTreeNode pNode; NodeStack.push(pTreenode); while (!NodeStack.empty()) { while (NULL != (pNode = NodeStack.top())) // 向左走到尽头 { std::cout << "Item = " << pNode->Node << std::endl; // 访问当前结点 NodeStack.push(pNode->pLeft); // 左子树根结点入栈 } NodeStack.pop(); // 左子树根结点退栈 if (!NodeStack.empty()) { pNode = NodeStack.top(); NodeStack.pop(); // 当前结点退栈 NodeStack.push(pNode->pRight); // 当前结点的右子树根结点入栈 } } } // 中序遍历树 // 中序遍历输出的结果应该和用来初始化树的数组的排列顺序一致 void BinaryTree::InTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; if (NULL != pTreenode->pLeft) { InTraverseImpl(pTreenode->pLeft); } std::cout << "Item = " << pTreenode->Node << std::endl; if (NULL != pTreenode->pRight) { InTraverseImpl(pTreenode->pRight); } } // 非递归中序遍历树 void BinaryTree::NoRecInTraverseImpl(PTreeNode pTreenode) { if (NULL == pTreenode) return; TreeNodeStack NodeStack; 。


电脑版

免责声明:本站信息来自网络收集及网友投稿,仅供参考,如果有错误请反馈给我们更正,对文中内容的真实性和完整性本站不提供任何保证,不承但任何责任,谢谢您的合作。
版权所有:五学知识网 Copyright © 2015-2024 All Rights Reserved .