美文网首页
二叉树操作

二叉树操作

作者: Baltan | 来源:发表于2019-02-14 22:32 被阅读0次

树节点

public class TreeNode<T> {
    private T data;
    private TreeNode<T> left;
    private TreeNode<T> right;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public TreeNode<T> getLeft() {
        return left;
    }

    public void setLeft(TreeNode<T> left) {
        this.left = left;
    }

    public TreeNode<T> getRight() {
        return right;
    }

    public void setRight(TreeNode<T> right) {
        this.right = right;
    }
}

逐行顺序解析二叉树

public static List<Integer> parseBinaryTree(TreeNode<Integer> treeNode) {
        Queue<TreeNode<Integer>> queue = new LinkedList<>();
        List<Integer> list = new ArrayList<>();

        queue.offer(treeNode);

        while (!queue.isEmpty()) {
            TreeNode<Integer> currentTreeNode = queue.poll();
            if (currentTreeNode != null) {
                list.add(currentTreeNode.getData());
                queue.offer(currentTreeNode.getLeft());
                queue.offer(currentTreeNode.getRight());
            }
        }
        return list;
    }

前序遍历二叉树

public static List<Integer> preOrder(TreeNode<Integer> treeNode) {
        List<Integer> list = new ArrayList<>();

        if (treeNode != null) {
            list.add(treeNode.getData());
        }
        if (treeNode != null && treeNode.getLeft() != null) {
            list.addAll(preOrder(treeNode.getLeft()));
        }
        if (treeNode != null && treeNode.getRight() != null) {
            list.addAll(preOrder(treeNode.getRight()));
        }
        return list;
    }

中序遍历二叉树

public static List<Integer> inOrder(TreeNode<Integer> treeNode) {
        List<Integer> list = new ArrayList<>();

        if (treeNode != null && treeNode.getLeft() != null) {
            list.addAll(inOrder(treeNode.getLeft()));
        }
        if (treeNode != null) {
            list.add(treeNode.getData());
        }
        if (treeNode != null && treeNode.getRight() != null) {
            list.addAll(inOrder(treeNode.getRight()));
        }
        return list;
    }

后序遍历二叉树

public static List<Integer> postOrder(TreeNode<Integer> treeNode) {
        List<Integer> list = new ArrayList<>();

        if (treeNode != null && treeNode.getLeft() != null) {
            list.addAll(postOrder(treeNode.getLeft()));
        }
        if (treeNode != null && treeNode.getRight() != null) {
            list.addAll(postOrder(treeNode.getRight()));
        }
        if (treeNode != null) {
            list.add(treeNode.getData());
        }
        return list;
    }

删除指定数值的节点

public static TreeNode<Integer> deleteNode(TreeNode<Integer> treeNode, int value) {
        if (treeNode != null) {
            if (treeNode.getData() == value) {
                treeNode = null;
            } else {
                treeNode.setLeft(deleteNode(treeNode.getLeft(), value));
                treeNode.setRight(deleteNode(treeNode.getRight(), value));
            }
        }
        return treeNode;
    }

前序遍历顺序存储的完全二叉树

public static List<Integer> preOrderArray(int[] arr, int startIndex) {
        List<Integer> list = new ArrayList<>();

        if (arr == null || arr.length == 0 || startIndex >= arr.length) {
            return list;
        }
        list.add(arr[startIndex]);
        if (startIndex * 2 + 1 < arr.length) {
            list.addAll(preOrderArray(arr, startIndex * 2 + 1));
        }
        if (startIndex * 2 + 2 < arr.length) {
            list.addAll(preOrderArray(arr, startIndex * 2 + 2));
        }
        return list;
    }

把数组转化成二叉树

public static TreeNode arrayToBinaryTree(Integer[] arr, int index) {
        if (arr == null || arr.length == 0) {
            return null;
        }
        TreeNode root = null;

        if (index < arr.length) {
            Integer value = arr[index];

            if (value == null) {
                return null;
            }

            root = new TreeNode();
            root.setData(value);
            root.setLeft(arrayToBinaryTree(arr, 2 * index + 1));
            root.setRight(arrayToBinaryTree(arr, 2 * index + 2));
            return root;
        }
        return root;
    }

相关文章

  • 68_二叉树的比较与相加

    关键词:二叉树的克隆操作、二叉树比较操作、二叉树的相加操作 0. 二叉树的克隆操作 SharedPointer< ...

  • 二叉树链式存储

    一、二叉树构造 二、二叉树基本操作 1、打印数据 2、构造空二叉树T 销毁二叉树初始条件: 二叉树T存在。操作结果...

  • 平衡二叉树的基本操作

    平衡二叉树定义及操作原理 C++简单实现 涉及练习题目:平衡二叉树的基本操作

  • 二叉树与图

    二叉树深度搜索 1. 路径总和 II 前序操作和后序操作结合: 2.二叉树的最近公共祖先 3. 二叉树展开为链表...

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • Day18 剑指offer:二叉树镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树的镜像

    题目: 操作给定的二叉树,将其变换为源二叉树的镜像。

  • 二叉树

    一些关于二叉树的简单操作 创建节点 简单操作

网友评论

      本文标题:二叉树操作

      本文链接:https://www.haomeiwen.com/subject/gffueqtx.html