二叉树节点结构:
struct BinaryTreeNode { T _data;//数据 BinaryTreeNode*, _left;//指向左子树 BinaryTreeNode *, _right;//指向右子树 BinaryTreeNode (const T&, d) :_data (d) _left(空) _right(空) {} };
节点*,_CreateTree (const T *,,, size_t 大小,size_t&,指数,const T&, invilid) { 节点*,root =,空; 如果(index前序遍历:
/*,前序遍历:根→左子树,右子树,*/void _PrevOrder(节点*,根) { 如果(root ==, NULL) { 返回; } cout<& lt;根→_data<& lt;“,”;//打印根节点数据 _PrevOrder(根→_left);//递归遍历左子树 _PrevOrder(根→_right);//递归遍历右子树 }
/*,中序遍历:左子树→根→右子树,*/void _InOrder(节点*,根) { 如果(root ==, NULL) { 返回; } _InOrder(根→_left);//递归遍历左子树 cout<& lt;根→_data<& lt;“,”;//打印根节点数据 _InOrder(根→_right);//递归遍历右子树 }
/*,后序遍历:左子树,右子树→根*/void _PostOrder(节点*,根) { 如果(root ==, NULL) { 返回; } _PostOrder(根→_left);//递归遍历左子树 _PostOrder(根→_right);//递归遍历右子树 cout<& lt;根→_data<& lt;“,”;//打印根节点数据 }
/*,层次遍历:第一层→最后一层,*/void _LevelOrder(节点*,根) { queue<节点*祝辞,qt; 如果(root ==, NULL) { ,,,,,,,返回; } qt.push(根),,,,,,,,,//将根节点压到队列中 而(! qt.empty ()) { ,,,,,,,/*,当根节点的左孩子不为空,就说明这一层还没有完全压入队列中,*/,,,,,,,如果(qt.front ()→_left !=, NULL) { qt.push (qt.front ()→_left);,,,,//将根节点左子树压到队列中 }/*,当根节点的右孩子不为空,就说明这一层还没有完全压入队列中,*/如果(qt.front ()→_right !=, NULL) { qt.push (qt.front ()→_right);,,,//将根节点右子树压到队列中 } cout<& lt; qt.front ()→_data<& lt;“,”,,,,,//依次打印节点 qt.pop(),,,,,,,,//将打印的节点出队列 } }
size_t _Size(节点*,根) { 如果(root ==, NULL) { return 0; } return _Size(根→_left) + _Size(根→_right) + 1;//左子树节点+右子树节点+根节点 }
size_t _Depth(节点*,根) { 如果(root ==, NULL) { return 0; } size_t LeftDepth =, _Depth(根→_left); size_t RightDepth =, _Depth(根→_right); 如果(LeftDepth 祝辞=,RightDepth) { return LeftDepth + 1; } 其他的 { return RightDepth + 1; } }
size_t _LeafSize(节点*,根) { 如果(root ==, NULL) { return 0; } 如果(根→_left ==, NULL ,,,根→_right ==, NULL),,,,//只有根节点 { return 1; } return _LeafSize(根→_left) + _LeafSize(根→_right); }
# include & lt; iostream> # include & lt; queue> using namespace 性传播疾病; template & lt; class T> struct BinaryTreeNode { T _data;//数据域 BinaryTreeNode*, _left;//指向左子树 BinaryTreeNode *, _right;//指向右子树 BinaryTreeNode (const T&, d) :_data (d) _left(空) _right(空) {} }; template class BinaryTree { typedef BinaryTreeNode< T>,节点;,//类型重命名,方便后面使用 公众: BinaryTree () :_root(空) {} BinaryTree (const T *,,, size_t 大小,const T&, invilid) :_root(空) { size_t index =, 0; _root =, _CreateTree(一个,大小,指数,invilid); } BinaryTree 二叉树基础