在二叉树中插入节点

/*
问题描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。(不使用递归)
来源:LintCode
作者:syt

日期:2017-11-13

思路:用一个节点preNode记录最后一个节点,当遍历到为空时,根据插入节点的值与preNode的值比较,大于preNode的值插入到preNode的右子树,否则,为左子树

*/

#include 

class TreeNode
{
public:
	int val;
	TreeNode *left, *right;
	TreeNode(){}
	TreeNode(int val, TreeNode *lptr = NULL, TreeNode *rptr = NULL) {
		this->val = val;
		this->left = lptr;
		this->right = rptr;
	}
};

#include "d_tree.h"
using namespace std;
/*
* @param root: The root of the binary search tree.
* @param node: insert this node into the binary search tree
* @return: The root of the new binary search tree.
*/
TreeNode * insertNode(TreeNode * root, TreeNode * node) {
	// write your code here
	TreeNode *tnode = root;
	TreeNode *preNode;
	if (tnode == NULL)
		return node;
	while (tnode != NULL)
	{
		preNode = tnode;
		if (tnode->val > node->val)
		{
			
			tnode = tnode->left;
		}
		else
		{
			tnode = tnode->right;
		}
	}
	if (preNode->val > node->val)
		preNode->left = node;
	else
		preNode->right = node;
	return root;
}


TreeNode *buildTree(int n)
{
	TreeNode *root, *b, *c, *d, *e, *f, *g, *h;
	switch (n)
	{
	case 1:
		//d = new TreeNode(3);
		//c = new TreeNode(4, d, (TreeNode *)NULL);
		b = new TreeNode(1);
		root = new TreeNode(2, b, (TreeNode *)NULL);
		break;
	case 2:
		h = new TreeNode(9);
		g = new TreeNode(7);
		f = new TreeNode(6);
		e = new TreeNode(5);
		d = new TreeNode(4, g, h);
		c = new TreeNode(3, e, f);
		b = new TreeNode(2, d, (TreeNode *)NULL);
		root = new TreeNode(1, b, c);
		break;
	}
	return root;
}
void main()
{
	TreeNode *root = buildTree(1);
	TreeNode *node = new TreeNode(3);
	insertNode(root, node);

}



你可能感兴趣的:(C++,算法学习)