public class Tree {
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public static void main(String[] args) {
Integer[] data = {5, 4, 8, 11, null, 13, 4, 7, 2, null, null, null, 1};
Tree tree = new Tree();
TreeNode root = tree.createTree(data, 0);
System.out.println(tree.preorderTraversal(root));
System.out.println(tree.inorderTraversal(root));
System.out.println(tree.postorderTraversal(root));
System.out.println(tree.levelOrder(root));
}
/**
* 创建树
*
* @param arr
* @param index
* @return
*/
private TreeNode createTree(Integer[] arr, int index) {
TreeNode treeNode = null;
if (index < arr.length) {
Integer value = arr[index];
if (value == null) {
return null;
}
treeNode = new TreeNode(value);
treeNode.left = createTree(arr, 2 * index + 1);
treeNode.right = createTree(arr, 2 * index + 2);
return treeNode;
}
return treeNode;
}
/**
* 前序遍历
*
* @param root
* @return
*/
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
preorder(root, res);
return res;
}
public void preorder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
res.add(root.val);
preorder(root.left, res);
preorder(root.right, res);
}
/**
* 中序遍历
*
* @param root
* @return
*/
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
inorder(root, res);
return res;
}
public void inorder(TreeNode root, List<Integer> res) {
if (root == null) {
return;
}
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
/**
* 后序遍历
*
* @param root
* @return
*/
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
postorder(root, res);
return res;
}
public void postorder(TreeNode root, List<Integer> res) {
if (root == null) return;
postorder(root.left, res);
postorder(root.right, res);
res.add(root.val);
}
/**
* 层序遍历
*
* @param root
* @return
*/
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
if (root != null) {
queue.add(root);
}
while (!queue.isEmpty()) {
int n = queue.size();
List<Integer> level = new ArrayList<>();
for (int i = 0; i < n; i++) {
TreeNode node = queue.poll();
level.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
}
res.add(level);
}
return res;
}
树的遍历(评测机)
最新推荐文章于 2025-05-18 22:44:32 发布