leetcode94—二叉树的中序遍历

要对一颗二叉树进行中序遍历,本文分别用递归和非递归的方法进行遍历。

1.递归
中序递归的思路很清晰,对于每个子树,先遍历左子树,再打印根节点值,最后遍历右子树

void inordernum(TreeNode *root,vector<int> &res)
{
	 if(root==NULL )
		 return ;
	 inordernum(root->left ,res);
	 res.push_back (root->val );
	 inordernum(root->right ,res);
}
 vector<int> inorder(TreeNode *root)
  {
     vector<int> res;
	 inordernum (root,res);
	 return res;
  }

2.非递归
非递归虽然使用了栈,但是和递归的思路完全一样,递归函数的入口就是入栈,递归函数结束就是出栈。第一个while循环就是遍历左子树,找到最左边的节点,所有节点入栈就相当于一层层递归。到达最左侧的节点之后,while停止,就好比递归到了最底层的函数。然后读取此时节点的值,然后该元素出栈,相当于返回上一层递归。虽然最后指向了右节点,但是右节点没有入栈,如果它不为空才会入栈,不然退回上一层节点。

 vector<int> inorderTraversal(TreeNode* root) {
        vector<int > res;
	 stack<TreeNode *> temp;
	  while(!temp.empty ()||root!=NULL ) 
		  {
		     while(root!=NULL )
			 {
			    temp.push (root );
				root=root->left ;
			 }
			 if(!temp.empty () )
			 {
				 root=temp.top();
                  res.push_back (root->val );
                 temp.pop();
				 root=root->right; 
			 }
		  }
          return res;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值