1、如何定义一个二叉树
通过递归的方式定义二叉树:不能直接定义二叉树,只能定义二叉树结点。节点类的属性包括当前节点的值、左子节点、右子节点(子节点的类型也是二叉树结点类)、构造函数,代码如下:
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
2、深度优先搜索(前序搜索:根节点-左节点-右节点)
3、例题应用
1)求二叉树的深度
采用DFS,先求左子树的深度,再求右子树的深度,返回
class Solution {
public int maxDepth(TreeNode root) {
if(root==null)
return 0;
int l_length = 1 , r_length = 1;
l_length = maxDepth(root.left) + 1;
r_length = maxDepth(root.right) + 1;
return l_length>r_length?l_length:r_length;
}
}
2)合并两棵二叉树
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if(t1==null)
return t2;
if(t2==null)
return t1;
TreeNode new_merge_tree = new TreeNode(t1.val + t2.val);
new_merge_tree.left = mergeTrees(t1.left,t2.left);
new_merge_tree.right = mergeTrees(t1.right,t2.right);
return new_merge_tree;
}
}