[算法]死磕二叉树专题算法(代码片段)

陈驰字新宇 陈驰字新宇     2022-11-02     612

关键词:

1. 二叉树遍历(递归和非递归)

构造二叉树:

class Node
    public String value;
    public Node left;
    public Node right;
    public Node(String value) 
        this.value = value;
    

递归版前序遍历:

public static void preOrder(Node head)
        if(head != null)
            System.out.print(head.value + " ");
            preOrder(head.left);
            preOrder(head.right);
        
    

递归版中序遍历:

public static void inOrder(Node head)
        if(head != null)
            inOrder(head.left);
            System.out.print(head.value + " ");
            inOrder(head.right);
        
    

递归版后序遍历:

    public static void posOrder(Node head)
        if(head != null)
            posOrder(head.left);
            posOrder(head.right);
            System.out.print(head.value + " ");
        
    

非递归版前序遍历:

public static void preOrder(Node head)
        if(head != null)
            Stack<Node> stack = new Stack<>();
            stack.push(head);
            while(!stack.isEmpty())
                Node pop = stack.pop();
                System.out.print(pop.value + " ");
                if(pop.right != null)
                    stack.push(pop.right);
                if(pop.left != null)
                    stack.push(pop.left);
            
        
    

非递归版中序遍历:

    public static void inOrder(Node head)
        if(head != null)
            Stack<Node> stack = new Stack<>();
            while(!stack.isEmpty() || head != null)
                if(head != null)
                    stack.push(head);
                    head = head.left;
                else
                    head = stack.pop();
                    System.out.print(head.value + " ");
                    head = head.right;
                
            
        
    

非递归版后序遍历:

    public static void postOrder(Node head)
        if(head != null)
            Stack<Node> stack1 = new Stack<>();
            Stack<Node> stack2 = new Stack<>();
            stack1.push(head);
            while(!stack1.isEmpty())
                Node pop = stack1.pop();
                stack2.push(pop);
                if(pop.left != null)
                    stack1.push(pop.left);
                
                if(pop.right != null)
                    stack1.push(pop.right);
                
            
            while(!stack2.isEmpty())
                System.out.print(stack2.pop().value + " ");
            
        
    

这里用了两个栈,其实一个栈也能实现,这里这样做是因为可以和前序遍历对比着记,比较容易。

面试---算法面试(代码片段)

算法二叉树二叉树的遍历(前序、中序、后序、层序)递归版本非递归版本二叉树的常见oj二叉树的右视图N叉树的层序遍历反转二叉树对称二叉树子树问题二叉树的最近祖先问题二叉树的最大高度问题二叉树的最小深度完全二叉树... 查看详情

算法搞定[机试]算法刷题全文超过80页pdf(代码片段)

目录算法专题一、树和图1.二叉树构造和遍历2.朋友圈-并查集3.公共朋友-非朋友圈4.哈夫曼树5.其他二叉树性质相关计算6.图的连通分量7.最小生成树8.单源最短路径-dijkstra二、枚举搜索1.按钮开关问题2.多层枚举问题三、递归搜索1.... 查看详情

二叉树的实验--二叉树的主要遍历算法(代码片段)

...验说明数据结构实验三二叉树的实验--二叉树的主要遍历算法一、实验目的通过本实验使学生熟悉二叉树遍历的各种算法;掌握采用递归实现二叉树遍历算法的方法;深刻理解栈在递归中的作用,进而学会递归转为非递归的方法... 查看详情

二叉排序树各类算法实现(代码片段)

数据结构----二叉排序树各类算法实现实现如下排序二叉树算法:(1)创建排序二叉树(2)排序二叉树插入算法(3)排序二叉树删除算法(4)排序二叉树查找算法测试数据说明:20145633355678... 查看详情

二叉树的相关算法(代码片段)

1.求二叉树所有的节点数2.求二叉树所有的叶子节点数3.求二叉树最小值的节点值4.求二叉树所有节点值之和5.求二叉树节点值为x的个数6.删除二叉树//求二叉树所有的节点数intnodes(BTNode*r)if(r==0)return0;elsereturnnodes(r->lchild)+nodes(r->... 查看详情

数据结构与算法学习笔记树(代码片段)

数据结构与算法学习笔记(7)树前情回顾文章目录数据结构与算法学习笔记(7)树一.树和二叉树的定义1.树树的定义树的基本术语树结构与线性结构比较2.二叉树二叉树的定义二叉树与树的差别二叉树基本形态3.树和二叉树的抽象数... 查看详情

考研数据结构与算法树与二叉树(代码片段)

考研数据结构与算法(六)树与二叉树文章目录考研数据结构与算法(六)树与二叉树一、树的概念和基础术语1.1定义1.2基础术语1.3树的性质二、二叉树2.1二叉树定义2.2二叉树性质2.2.1满二叉树2.2.2完全二叉树2.2.3... 查看详情

算法——建立线索二叉树(代码片段)

文章目录【0】建立线索二叉树和遍历线索二叉树基本上是一样的【1】代码:一、`TreeNode`节点:二、`BinaryTree`二叉树三、线索二叉树【2】测试【0】建立线索二叉树和遍历线索二叉树基本上是一样的建立如图... 查看详情

算法_二叉树遍历篇(代码片段)

Java二叉树遍历篇通过二叉树的前序、中序、后序遍历以及层序遍历等方式,理解二叉树的结构思想。文章目录Java二叉树遍历篇二叉树定义一、前序遍历二、中序遍历三、后序遍历四、层序遍历二叉树定义publicclassTreeNode/**根... 查看详情

算法——二叉树的遍历(代码片段)

0.二叉树定义Definitionforabinarytreenode.publicclassTreeNodeintval;TreeNodeleft;TreeNoderight;TreeNode()TreeNode(intval)this.val=val;TreeNode(intval,TreeNodeleft,TreeNoderight)this.val=val;th 查看详情

数据结构与算法学习笔记树(代码片段)

数据结构与算法学习笔记(7)树前情回顾文章目录数据结构与算法学习笔记(7)树一.树和二叉树的定义1.树树的定义树的基本术语树结构与线性结构比较2.二叉树二叉树的定义二叉树与树的差别二叉树基本形态3.树和二叉树的抽象数... 查看详情

算法_二叉树遍历篇(代码片段)

Java二叉树遍历篇通过二叉树的前序、中序、后序遍历以及层序遍历等方式,理解二叉树的结构思想。文章目录Java二叉树遍历篇二叉树定义一、前序遍历二、中序遍历三、后序遍历四、层序遍历二叉树定义publicclassTreeNode/**根... 查看详情

二叉树的遍历算法(代码片段)

二叉树的遍历算法概述二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了。很多题目都会有ta的身影,有直接问二叉树的遍历的,有间接问的。比如要你找到树中满足条件的节点,就... 查看详情

算法总结二叉树常见算法题目及解题思路汇总(代码片段)

二叉树算法总结主要解决思路:递归自底向上分治栈或队列常见算法题二叉树结构定义如下publicclassTreeNodeintval;TreeNodeleft;TreeNoderight;TreeNode(intx)val=x;1、前序遍历LeetCode144给定一个二叉树,返回它的前序遍历。递归解法pub... 查看详情

《剑指offer》专题—算法训练day02(代码片段)

文章目录《剑指offer》专题—算法训练day02一、替换空格思路二、从尾到头打印链表思路一思路二思路三三、重建二叉树思路四、斐波那契数列思路一思路二未完待续.....《剑指offer》专题—算法训练day02  今天开始了剑指offer算... 查看详情

数据结构与算法(java)之二叉树(代码片段)

二叉树packagecom.weeks.tree;/***@author达少*@version1.0**实现二叉树数据结构*/publicclassBinaryTreeDemopublicstaticvoidmain(String[]args)//定义二叉树BinaryTreebinaryTree=newBinaryTree();//定义二叉树的节点对象HeroNode 查看详情

二叉树遍历的递归算法(代码片段)

【二叉树遍历的递归算法】 实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 1.头文件:btree.h,包含定义顺序表数据结构的代码、宏定义、要实现算... 查看详情

算法刷题:lc初级算法(代码片段)

文章目录二叉树的最大深度验证二叉搜索树对称二叉树二叉树的层序遍历将有序数组转换为二叉搜索树二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说... 查看详情