PS.更多数据结构知识详见:
八大数据结构
C++二叉树的数据结构
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode ( int val) : val ( val) , left ( nullptr ) , right ( nullptr ) { }
} ;
构建二叉树
void CreateBinaryTree ( TreeNode* & root)
{
char ch;
cin >> ch;
if ( ch == '#' )
{
root = nullptr ;
}
else
{
root = new TreeNode ( ch) ;
CreateBinaryTree ( root- > left) ;
CreateBinaryTree ( root- > right) ;
}
}
前序遍历
void PreOrderTraverse ( TreeNode* root)
{
if ( root == nullptr )
return ;
cout << root- > val << " " ;
PreOrderTraverse ( root- > left) ;
PreOrderTraverse ( root- > right) ;
}
前序遍历的迭代版本
中序遍历
void InOrderTraverse ( TreeNode* root)
{
if ( root == nullptr )
return ;
InOrderTraverse ( root- > left) ;
cout << root- > val << " " ;
InOrderTraverse ( root- > right) ;
}
中序遍历的迭代版本
后序遍历
void LastOrderTraverse ( TreeNode* root)
{
if ( root == nullptr )
return ;
LastOrderTraverse ( root- > left) ;
LastOrderTraverse ( root- > right) ;
cout << root- > val << " " ;
}
后序遍历迭代版本
层序遍历
void FloorOrderTraverse ( TreeNode * root)
{
if ( root == nullptr )
return ;
queue< TreeNode* > que;
que. push ( root) ;
while ( ! que. empty ( ) )
{
TreeNode* cur = que. front ( ) ;
que. pop ( ) ;
cout << cur- > val << " " ;
if ( cur- > left)
que. push ( cur- > left) ;
if ( cur- > right)
que. push ( cur- > right) ;
}
}
测试
void testBinaryTree ( )
{
TreeNode* root = nullptr ;
CreateBinaryTree ( root) ;
cout << "输出前序遍历的结果 :" << endl;
PreOrderTraverse ( root) ;
cout << endl << endl;
cout << "输出中序遍历的结果 :" << endl;
InOrderTraverse ( root) ;
cout << endl << endl;
cout << "输出后序遍历的结果 :" << endl;
LastOrderTraverse ( root) ;
cout << endl << endl;
cout << "输出层序遍历的结果 :" << endl;
FloorOrderTraverse ( root) ;
cout << endl << endl;
}
运行结果
二叉树的应用
1.反转二叉树
2.二叉树的右视图
3.前序和中序、中序和后序构建二叉树