前言:
今天姐妹们对“二叉树遍历实验报告总结”大致比较关怀,小伙伴们都需要学习一些“二叉树遍历实验报告总结”的相关文章。那么小编同时在网摘上网罗了一些有关“二叉树遍历实验报告总结””的相关资讯,希望我们能喜欢,你们一起来学习一下吧!1 二叉树的数据结构
代码:
/*** @desc: 二叉树的数据结构* @author: YanMingXin* @create: 2021/9/24-10:46**/public class TreeNode<E> { public E val; public TreeNode<E> leftNode;public TreeNode<E> rightNode;public TreeNode(E val) { this.val = val;}public TreeNode(E val, TreeNode<E> leftNode, TreeNode<E> rightNode) { this.val = val; this.leftNode = leftNode; this.rightNode = rightNode;}}2 遍历算法概览3 遍历算法详解3.1 前序遍历
(1)概念
“根—左—右”,顾名思义就是先根节点,再左子树,最后是右子树
(2)图解
(3)代码实现
递归方式:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 前序遍历(递归方式)** @param tree* @return*/public List prePrint(TreeNode tree) { if (tree == null) { return list; } list.add(tree.val); prePrint(tree.leftNode); prePrint(tree.rightNode); return list;}
非递归方式:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 辅助栈*/private Stack<TreeNode> stack = new Stack<>();/*** 前序遍历(非递归)** @param treeNode* @return*/public List prePrint2(TreeNode treeNode) { //获取根节点 TreeNode root = treeNode; //如果根节点不为空或栈不为空则进行循环 while (root != null || !stack.isEmpty()) { if (root != null) { //压入元素 stack.push(root); //获取值 list.add(root.val); //指向左节点 root = root.leftNode; } else { //弹出元素 root = stack.pop(); //指向右节点 root = root.rightNode; } } return list;}3.2 后序遍历
(1)概念
“左—右—根”,顾名思义就是先左子树,再右子树,最后是根节点
(2)图解
(3)代码实现
递归实现:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 后序遍历(递归方式)** @param tree* @return*/public List afterPrint(TreeNode tree) { if (tree == null) { return list; } afterPrint(tree.leftNode); afterPrint(tree.rightNode); list.add(tree.val); return list;}
非递归实现:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 辅助栈*/private Stack<TreeNode> stack = new Stack<>();/*** 后序遍历(非递归)** @param treeNode* @return*/public List afterPrint2(TreeNode treeNode) { TreeNode root = treeNode; TreeNode pre = null; while (root != null || !stack.isEmpty()) { while (root != null) { stack.push(root); root = root.leftNode; } root = stack.pop(); if (root.rightNode == null || root.rightNode == pre) { list.add(root.val); pre = root; root = null; } else { stack.push(root); root = root.rightNode; } } return list;}3.3 中序遍历
(1)概念
“左—根—右”,顾名思义就是先左子树,再根节点,最后是右子树
(2)图解
(3)代码实现
递归实现:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 中序遍历(递归方式)** @param tree* @return*/public List midPrint(TreeNode tree) { if (tree == null) { return list; } midPrint(tree.leftNode); list.add(tree.val); midPrint(tree.rightNode); return list;}
非递归实现:
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 辅助栈*/private Stack<TreeNode> stack = new Stack<>();/*** 中序遍历(非递归)** @param treeNode* @return*/public List midPrint2(TreeNode treeNode) { TreeNode root = treeNode; while (root != null || !stack.isEmpty()) { if (root != null) { stack.push(root); root = root.leftNode; } else { root = stack.pop(); list.add(root.val); root = root.rightNode; } } return list;}3.4 层次遍历
(1)概念
层次遍历又称广度优先遍历,是从上到下按层次依次进行遍历
(2)图解
(3)代码实现
/*** 辅助列表*/private ArrayList<Object> list = new ArrayList<>();/*** 辅助队列*/private Queue<TreeNode> queue = new LinkedList();/*** 层次遍历** @param tree* @return*/public List levelPrint(TreeNode tree) { if (tree == null) { return new ArrayList(); } queue.add(tree); while (!queue.isEmpty()) { TreeNode obj = queue.poll(); list.add(obj.val); if (obj.leftNode != null) { queue.add(obj.leftNode); } if (obj.rightNode != null) { queue.add(obj.rightNode); } } return list;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #二叉树遍历实验报告总结