判断是否为合法排序二叉树

原创 2015年11月18日 17:29:41

题目大意:判断二叉树一个数是否为一颗排序二叉树。

解题思路:方法有多种,可以先对二叉树进行中序遍历,然后检查得到的遍历结果是否是升序。不过这样做除了遍历二叉树需要的栈以外还需要一个数值来存储遍历结果以及在此遍历结点元素。有一种方法也是利用中序遍历的思想,用一个变量存储上一个结点的值,在每访问一个结点时,判断当前结点的值是否大于上一结点的值。如果成立,则继续遍历二叉树,如果不成立,则返回false。

Java代码:

<span style="font-size:14px;">/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isValidBST(TreeNode root) {
        long preVal = Long.valueOf(Integer.MIN_VALUE) - 1;  //  根节点前一个“元素的”初始值,方式根节点的值为Integer.MIN_VALUE
        List<TreeNode> list = new ArrayList<TreeNode>();
        while (list.size()!=0 || root!=null) {
        	while (root != null) {
        		list.add(root);
        		root = root.left;
        	}
        	
        	if (root == null) {
        		root = list.get(list.size() - 1);
        		if (preVal < root.val) {      //  判断是否升序
        		    preVal = root.val;
        			root = root.right;
        			list.remove(list.size() - 1);
        		} else 
        			return false;
        	}
        }
        
        return true;
    }
}</span>


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

判断一个二叉树是不是合法的二分查找树

leetcode题目https://leetcode.com/problems/validate-binary-search-tree/,判断一个二叉树是不是合法的二分查找树,这个题目应该说遇到多次了...

判断二叉树的后序遍历序列是否合法

题目:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false.假设输入的数组任意两个数字都不相同。分析: 二叉树的后序遍历的结果中,最后一个是根节...

14 判断给定的二叉排序树后序遍历序列是否合法

前言本博文部分图片, 思路来自于剑指offer 或者编程珠玑问题描述思路对于这个问题, 书中给出了一种解法思路 : 输入为一个后序遍历的序列, 从这里 我们可以得到序列中最后一个元素为根节点, 又因为...

判断二叉搜索树的后序遍历序列是否合法

简单的分析一下,后序遍历,遍历顺序为左右根,那么序列的最后一个节点必为根节点。由于二叉搜索树的性质,根节点的左子树所有值小于根节点的值,右子树大于根节点,那么,我们只需要将序列分为左子树(leftTr...

图结构练习——判断给定图是否存在合法拓扑序列(拓扑排序判断环)

图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000MS Memory limit: 65536K 题目描述  给定一个有向图,判断该有...

编写判断给定二叉树是否为二叉排序树的函数

#include "stdafx.h" #include #include using namespace std; struct Node { int element; Node *le...

判断给定的二叉树是否为二叉排序树

思路:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。递归遍历就可以了,反正就是左孩子的k...

判断二叉树是否为二叉排序树

#include #include typedef struct node { int data; struct node *lchild, *rchild; }Bitree; Bitr...

二叉树排序

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)