【数据结构系列】——二叉树的操作集合

二叉树

二叉树的遍历

void traverse(TreeNode root) {
    // root 需要做什么? 在这做。
    // 其他的不⽤ root 操⼼, 抛给框架
    traverse(root.left);
    traverse(root.right);
}

二叉树A中是否包含子树B

可以用递归的思想,先判断树的根节点是是否相等,若相等,则递归判断他们的子树是否相等;如果根节点不相等,则判断B树是存在在A树的左子树还是右子树

//递归
public static class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;
        }
    }
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
    if (root2 == null)
        return true;
    if (root1 == null)
        return false;
    if (hasSubtree(root1,root2))
        return true;
    //查找root2是否在root1的左右子树中
    return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
}

private boolean hasSubtree(TreeNode root1, TreeNode root2) {
    if (root1 == null && root2 == null)
        return true;
    if (root1 == null || root2 == null){
        return false;
    }
    return hasSubtree(root1.left,root2.left) && hasSubtree(root1.right,root2.right);
}

二叉树的镜像

递归的思想,先判断根节点是否相等,然后交换根节点的左右节点的值,交换之后对左右节点的子树再利用递归的思想进行镜像

//递归
public TreeNode Mirror (TreeNode pRoot) {
    if(pRoot == null)
        return null;
    if(pRoot != null){
        TreeNode temp = pRoot.left;
        pRoot.left = pRoot.right;
        pRoot.right = temp;
        if(pRoot.left != null){
            Mirrot(pRoot.left);
        }
        if(pRoot.right != null){
            Mirror(pRoot.right);
        }
    }
    return pRoot;
}
posted @ 2021-04-12 22:58  your_棒棒糖  阅读(28)  评论(0编辑  收藏  举报