LeetCode 算法刷题框架

二叉树

二叉树的遍历(递归)

	public void traverse(TreeNode root) {
		// 前序遍历
		traverse(root.left);
		// 中序遍历
		traverse(root.right);
		// 后序遍历
	}

二叉树的遍历(非递归)

    public List<Integer> preorderTraversal(TreeNode root) {
    	// 建立一个存储结果的集合,以及一个辅助栈
        List<Integer> list = new ArrayList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        // 如果节点不为空,或者辅助栈不为空,一直循环
        while(root != null || !stack.isEmpty()){
        	// 先一直将左孩子入栈
            while(root != null){
            
            	// 在这里可以进行前序遍历,将 root.val存入结果集合
                ........
                
                stack.push(root);
                root = root.left;
            }
            // 弹出栈顶元素
            root = stack.pop();
            
            // 在这里可以进行中序遍历,将 root.val存入结果集合
            ........
            
            // 因为左孩子已经遍历完了,所以从栈顶弹出元素,去找右孩子
            root = root.right;
        }
        return list;
    }

针对 二叉搜索树 的元素查找

void BST(TreeNode root, int target) {
	if (root.val == target)
		// 找到⽬标,做点什么
	if (root.val < target)
		BST(root.right, target);	// 剪枝
	if (root.val > target)
		BST(root.left, target);		// 剪枝
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值