二叉树基础

  

二叉树节点结构:


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

二叉树基础