这两天刷二叉树的时候感觉绝大部分树的问题大多都可以借助递归完成。
下面借助一个示例简单列一下自己最近总结出来的模板和一些性质。

struct TreeNode
{
int val;
TreeNode * left;
TreeNode * right;
TreeNode * parent;
}TreeNode;
- 前序遍历:根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面
root = [a|b|d|e|c]
void Preorder(TreeNode * Node)//前序遍历递归算法
{
if(Node == NULL) return;
/*结点业务操作*/
Preorder(Node->left);
Preorder(Node->right);
}
- 中序遍历:根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面
root = [d|b|e|a|c]
void Inorder(TreeNode *Node)//中序遍历递归算法
{
if(Node == NULL) return;
Inorder(Node->left);
/*结点业务操作*/
Inorder(Node->right);
}
- 后序遍历:根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面
root = [d|e|b|c|a]
void Postorder(TreeNode *Node)//后序遍历递归算法
{
if(Node == NULL) return;
Postorder(Node->left);
Postorder(Node->right);
/*结点业务操作*/
}
网友评论