好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 dxxbjl 于 2023-4-22 21:52 编辑
二叉树1、二叉树是什么
二叉树是由n个结点构成的有限集合,n=0时为空树,n>0时为非空树。
非空树:
- 有且仅有一个根结点;
- 除根结点外的其余结点又可分为两个不相交的子集Left 和Right ,分别称为此二叉树的左子树和右子树,且Left 和Right 本身又都是二叉树
2、二叉树的遍历
- 先序遍历 -- 根左右
- 中序遍历 -- 左根右
- 后序遍历 -- 左右根
3、代码实现
[Java] 纯文本查看 复制代码 public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
}
public class Solution {
/**
*
* [url=home.php?mod=space&uid=952169]@Param[/url] root TreeNode类 the root of binary tree
* [url=home.php?mod=space&uid=155549]@Return[/url] int整型二维数组
*/
public int[][] threeOrders (TreeNode root) {
// write code here
//创建三个集合,分别用来存放先序、中序、后序
List<Integer> front =new ArrayList<>();
List<Integer> middle =new ArrayList<>();
List<Integer> back = new ArrayList<>();
preOrder (root,front);
inOrder (root,middle);
postOrder(root,back);
System.out.println(front);
System.out.println(middle);
System.out.println(back);
//使用二维数组来接收
int [][] res =new int [3][front.size()];
for(int i = 0; i<front.size();i++){
res[0][i] = front.get(i);
res[1][i] = middle.get(i);
res[2][i] = back.get(i);
}
//结果返回二维数组形式
return res;
}
//先序遍历 -- 根 左 右
public void preOrder(TreeNode root ,List<Integer> list){
if(root == null){
return ;
}
//先放根节点
list.add(root.val);
//递归把左节点的值放入list
preOrder(root.left,list);
//递归把右节点的值放入list
preOrder(root.right,list);
}
//中序遍历 -- 左 根 右
public void inOrder(TreeNode root ,List<Integer> list){
if(root ==null){
return;
}
//先放左节点
inOrder(root.left,list);
//根节点
list.add(root.val);
//右节点
inOrder(root.right,list);
}
//后序遍历 -- 左 右 根
public void postOrder(TreeNode root ,List<Integer> list){
if(root ==null){
return;
}
//先放左节点
postOrder(root.left,list);
//右节点
postOrder(root.right,list);
//根节点
list.add(root.val);
}
} |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|