ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二叉树基础

2022-02-10 10:04:34  阅读:123  来源: 互联网

标签:node TreeNode val 基础 二叉树 nodes null


一、二叉树定义

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。

   

总结:每个人最多有2个孩子,但每个孩子只能有一个爸爸。

   

二、二叉树的前序、中序、后序遍历

给定一个二叉树集合,如何换为二叉树 ?

例:List = [8,9,96,34,19,69,72,null,null,24,57,25,47,68,null]  

public class BinaryTreeTest{

public static void main(String[] args) {

        Integer targetSum = 22;

        List<Integer> binaryTreeList = Arrays.asList(8,9,96,34,19,69,72,null,null,24,57,25,47,68,null);

   

        List<TreeNode> nodes = new ArrayList<>();

        for (Integer integer : binaryTreeList) {

            nodes.add(new TreeNode(integer == null ? 0:integer));

        }

   

        //构建二叉树

        if (nodes.size() > 0) {

            for (int i = 0; i < binaryTreeList.size()/2 ; i++) {

                //左

                if (nodes.get(2*i + 1) != null) {

                    nodes.get(i).left = nodes.get(2*i + 1);

                }

   

                //右

                if (binaryTreeList.get(2*i + 2) != null) {

                    nodes.get(i).right = nodes.get(2*i + 2);

                }

            }

        }

        printBinaryTreeOfPreOrder(nodes.get(0));

        System.out.println();

        System.out.println("result:"+pathSum(nodes.get(0), targetSum));

    }

   

    //前序

    private static void printBinaryTreeOfPreOrder(TreeNode node){

        if (node != null) {

            System.out.print(node.getVal()+",");

            printBinaryTreeOfPreOrder(node.getLeft());

            printBinaryTreeOfPreOrder(node.getRight());

        }

    }}

   

@Getter

@Setter

class TreeNode {

    Integer val;

    TreeNode left;

    TreeNode right;

   

    TreeNode() {

    }

   

    TreeNode(Integer val) {

        this.val = val;

    }

   

    TreeNode(int val, TreeNode left, TreeNode right) {

        this.val = val;

        this.left = left;

        this.right = right;

    }

}

   

   

   

   

1、前序遍历 根节点-左子-右子 (代码见上)

输出:8,9,34,19,24,57,96,69,25,47,72,68

   

2、中序遍历 左子-根节点-右子

输出:34,9,24,19,57,8,25,69,47,96,68,72

    //中序

    private static void printBinaryTreeOfInfix(TreeNode node){

        if (node != null) {

            printBinaryTreeOfInfix(node.getLeft());

            System.out.print(node.val+",");

            printBinaryTreeOfInfix(node.getRight());

        }

    }

   

3、后续遍历 左子-右子-根节点

输出:34,24,57,19,9,25,47,69,68,72,96,8

//后序

    private static void printBinaryTreeOfPostOrder(TreeNode node){

        if (node != null) {

            printBinaryTreeOfPostOrder(node.getLeft());

            printBinaryTreeOfPostOrder(node.getRight());

            System.out.print(node.val+",");

        }

    }

   

   

   

   

   

   

   

标签:node,TreeNode,val,基础,二叉树,nodes,null
来源: https://www.cnblogs.com/tiankx/p/15877887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有