算法框架
灵魂三问:
- 函数是干什么的
- 函数的变量是什么
- 得到递归的结果应该做什么
可以对左子树和右子树得到的结果进行处理,根据问题选择遍历的位置
原始
1 2 3 4 5 6 7
| void traverse(TreeNode root){ traverse(root.left); traverse(root.right); }
|
BST框架
1 2 3 4 5 6 7 8 9 10 11
| void BST(TreeNode root,int target){ if(root.val == target){ } if(root.val < target){ BST(root.left,target); } if(root.val > target){ BST(root.right,target); } }
|
完全二叉树节点个数
普通二叉树+满二叉树
层级遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void traverse(TreeNode root,int target){ if(root == null){ return; } Queue<TreeNode> q = new LinkedList<>(); q.offer(root); while(!q.isEmpty()){ TreeNode cur = q.poll(); if(cur.left != null){ q.offer(cur.left); } if(cur.right != null){ q.offer(cur.right); } } }
|