Tree
二叉树的相关算法
递归 && 非递归 && 搜索树
树的递归算法
先-中-后序遍历
1 | void preOrder(TreeNode *root) |
统计节点数
1 | int degree(TreeNode *root) |
树的高度
1 | int height(TreeNode *root) |
树的宽度
1 | void width(TreeNode *root, int k, int *v) |
先序+中序构建树
1 | TreeNode *buildTree(int *pre, int s1, int e1, int *in, int s2, int e2) |
交换左右子树
1 | TreeNode *swapLeftAndRight(TreeNode *root) |
先序第k个节点
1 | int preOrderOfK(TreeNode *root, int &i, int k) |
最大值
1 | int maxVal(TreeNode *root) |
删除节点
1 | void deleteTree(TreeNode *root) |
删除特点节点
1 | TreeNode *deleteValOfX(TreeNode *root, int x) |
树的非递归算法
先序遍历
算法1
1 | void preOrder1(TreeNode *root) |
算法2
1 | void preOrder2(TreeNode *root) |
中序遍历
1 | void inOrder(TreeNode *root) |
后序遍历
1 | void postOrder(TreeNode *root) |
层次遍历
1 | void levelOrder(TreeNode *root) |
求树高
1 | int height(TreeNode *root) |
树的宽度
1 | int width(TreeNode *root) |
搜索树结构
递归搜索
1 | TreeNode *search(TreeNode *root, int key) |
非递归搜索
1 | TreeNode *search(TreeNode *root, int key) |
插入
1 | bool insert(TreeNode *&root, int key) |