加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 安全 > 正文

【数据结构】 二叉树

发布时间:2021-03-31 02:27:40 所属栏目:安全 来源:网络整理
导读:副标题#e# 二叉树概念 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二 叉树的每个结点至多只有二棵子树(不存在度大于2的结

后序遍历(非递归):

void?_PostOrder_NoR()
????{
????????Node*?pre?=?NULL;
????????Node*?cur?=?_root;
????????stack<Node*>?s;
????????while?(cur?||?!s.empty())
????????{
????????????while?(cur)
????????????{
????????????????s.push(cur);
????????????????cur?=?cur->_left;
????????????}

????????????Node*?top?=?s.top();
????????????if?(top->_right?==?NULL?||?top->_right?==?pre)
????????????{
????????????????cout?<<?top->_data?<<?"?";
????????????????s.pop();
????????????????pre?=?top;
????????????}
????????????else
????????????{
????????????????cur?=?top->_right;
????????????}
????????}
????}

发现,非递归的实现是利用栈结构存储和管理二叉树的。


附源代码以及测试代码:

BinaryTree.h 文件:

#pragma?once?

#include?<stack>
template?<class?T>
struct?BinaryTreeNode
{
????T?_data;
????BinaryTreeNode<T>*?_left;
????BinaryTreeNode<T>*?_right;

????BinaryTreeNode(const?T&?x)
????????:?_data(x)
????????,?_left(NULL)
????????,?_right(NULL)
????{}
};

template?<class?T>
class?BinaryTree
{
????typedef?BinaryTreeNode<T>?Node;
public:
????BinaryTree()
????????:_root(NULL)
????{}

????BinaryTree(const?T*?a,?size_t?size,?const?T&?invalid)
????{
????????size_t?index?=?0;
????????_root?=?_CreatBinaryTree(?a,?size,?index,?invalid);
????}

????BinaryTree(const?BinaryTree<T>&?t)
????{
????????_root?=?_Copy(t._root);
????}

????//BinaryTree<T>&?operator=(const?BinaryTree<T>&?t)
????//{
????//????if?(this?!=?&t)
????//????{
????//????????Node*?tmp?=?_Copy(t._root);
????//????????_Destory(_root);
????//????????_root?=?tmp;
????//????}
????//????return?*this;
????/                        

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读